当前位置: 首页 > 面试题库 >

PHP中的preg_match和UTF-8

越姚石
2023-03-14
问题内容

我正在尝试使用preg_match搜索UTF8编码的字符串。

preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1];

这应该打印1,因为“ H”在字符串“¡Hola!”中的索引1处。但是它显示为2。因此,即使我在正则表达式中传递了“ u”
修饰符,似乎也不会将主题视为UTF8编码的字符串。

我在php.ini中具有以下设置,并且其他UTF8功能正在运行:

mbstring.func_overload = 7
mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off

有任何想法吗?


问题答案:

“ u”开关仅对pcre有意义,PHP本身并未意识到。

从PHP的角度来看,字符串是字节序列,返回字节偏移似乎是合乎逻辑的(我不说“正确”)。



 类似资料:
  • 问题内容: 我想知道和函数的作用以及如何使用它们。 问题答案: 在第一场比赛后停止寻找。另一方面,继续查找,直到完成对整个字符串的处理为止。找到匹配项后,它将使用字符串的其余部分尝试应用其他匹配项。 http://php.net/manual/zh/function.preg-match- all.php

  • 问题内容: 我在Excel文件中得到的是 但是,当我尝试时会得到Désçàui 有帮助专家吗? PS。该文件以标题/编码Unicode(Utf-8)保存在DW中。 问题答案: 我不确定,但是可能是excel无法处理utf8(可能取决于版本)。但是它可以处理utf16,因此请尝试转换字符集。这对我有效(在excel2002中):

  • 我尝试匹配这个表达式: * ^X-Spam-Flag:是的 我用这个代码: 但是我有这个错误: PHP警告:preg_match():编译失败:在偏移量0处没有任何重复 regex和*和^有问题,但我能纠正吗?

  • 我在mysql字段中有这些数据: 我正在尝试从第一个单词到双线断裂的预处理匹配。我试过了: 这不会返回任何行。我还尝试了< code>m和< code>s修饰符,它们不能返回正确的字符串。我还尝试了不返回任何内容的< code>\r\n。 你是怎么做到的

  • 我有一个非常奇怪的问题。 当我在浏览器中打开下面的脚本并执行它时,一切正常。即使我在命令行中调用脚本,也会得到预期的结果。 但是,如果在后台作业中运行脚本,脚本将在“preg_match”函数中中止,而不会出现任何错误。我在任何地方都没有关于此的错误消息,无论是在日志中还是其他任何地方。我还检查了函数是否存在,它是否存在。 脚本似乎只是在preg_匹配时中止,并且没有显示任何关于可能错误的消息。所

  • 如何正确使用preg_matchfile_get_content?我有一个用户可以登录的表单,如果用户输入了错误的信息,file_get_contents内的默认回声将被替换为使用preg_match但它不工作。 我有一个PHP代码片段,但我只得到一个白色的空白页面。