【问题标题】:My preg_match only works with utf8_encode [duplicate]我的 preg_match 仅适用于 utf8_encode [重复]
【发布时间】:2020-07-20 05:34:00
【问题描述】:

我的 PHP 代码从 AJAX 调用接收到 $request。我可以从此参数中提取$name。由于此名称是德语,因此允许的字符还包括 ä、ö 和 ü。

我想通过preg_match 验证$name = "Bär"。我敢肯定,ä 在我的 PHP 代码中以 UTF-8 编码字符串的形式正确到达。但是如果我这样做

preg_match('/^[a-zA-ZäöüÄÖÜ]*$/', $name);

我得到了false,虽然它应该是true。我只会收到true,以防万一

preg_match(utf8_encode('/^[a-zA-ZäöüÄÖÜ]*$/'), $name);

有人可以向我解释一下,以及我如何将 PHP 设置为将每个字符串全局编码为 UTF-8 吗?

【问题讨论】:

  • 当你应用一个从头到尾只允许一个单个字符的模式时,你当然会得到错误,值由三个组成> 字符……您在此处的字符类之后错过了一个适当的量词。
  • 你说得对,我错过了帖子中的 *,但这不是问题所在。问题是我的 IDE。下面 Joni 的答案是正确的,而且很有帮助。
  • 我刚刚更正了我的帖子并将 * 添加到代码中。这是一个复制错误,但不是问题的原因。问题的原因是我的 IDE。请参阅下面 Joni 的答案。

标签: php regex utf-8


【解决方案1】:

PHP 字符串没有任何特定的字符编码。字符串文字包含解释器在源文件的引号之间找到的字节。

您必须确保您使用的文本编辑器或 IDE 以 UTF-8 格式保存文件。您通常会在设置菜单中找到字符编码。

【讨论】:

  • 就是这样。非常感谢。我永远不会认为 IDE 是问题所在。我现在正在使用 Eclipse 并将文件编码更改为 UTF-8。我使用了stackoverflow.com/questions/9180981/… 的描述,它有所帮助。
【解决方案2】:

你的正则表达式是错误的。你只测试一个标志。 + 代表 1 个或多个字符。如果您的 PHP 代码保存为 UTF-8(无 BOM),则 Unicode 需要 u 标志。

$name = "Bär";
$result = preg_match('/^[a-zA-ZäöüÄÖÜ]+$/u', $name);

var_dump($result);  //int(1)

对于所有德语变音符号,列表中仍然缺少 ß。

【讨论】:

  • 非常感谢您的回复,但问题出在我的 IDE 上(请参阅下面 Joni 的回答)。你是对的,我错过了帖子中的 *,但这是我复制时的错误。 /u 也对我不起作用。它导致了一个错误,同时这对我来说是可以理解的,因为该文件不是 UTF-8 编码的。
猜你喜欢
  • 2016-07-09
  • 2019-01-26
  • 2017-09-13
  • 2017-08-12
  • 2014-03-25
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多