preg_match返回与输入字符串不同的符号

时间:2016-09-08 08:14:01

标签: php encoding character preg-match non-latin

[已解决]如果有人正在努力解决此问题,则将修饰符/u添加到正则表达式可以解决此问题。感谢M.I.在评论:)

请考虑以下代码:

var_dump('Trimiteţi');
preg_match('/^([\p{L}]+)/', 'Trimiteţi', $matches);
print_r($matches);

我使用它来过滤使用\p{L}可能包含非拉丁字符的单词,同时请注意我在$中不使用结束字符串preg_match正则表达式符号}

现在问题是,在本地执行代码时,我收到了这个输出:

string 'Trimiteţi' (length=10)
Array ( [0] => TrimiteÅ [1] => TrimiteÅ )

我尝试在PHP sandbox中执行代码,并输出类似的内容:

string(10) "Trimiteţi"
Array
(
    [0] => Trimite�
    [1] => Trimite�
)

请注意,至少这次它没有破坏原来的var_dump字。

发生了什么事?为什么使用preg_match更改单词?最糟糕的是,如果我将$添加到正则表达式的末尾,它将 NOT MATCH ,因为我认为这些转换的符号不能被解释为字符串结尾或某事。拜托,帮帮我

编辑:我正在运行的文件编码设置为“text / x-php; charset = utf-8”
Edit2:另外,我使用regex101.com,当使用REGULAR EXPRESSION“^ [\ p {L}] + $”和单词“Trimiteţi”时,似乎匹配。您甚至可以将REGULAR EXPRESSION切换为“^([\ p {L}] +)$”,添加捕获组和站点输出:

MATCH 1
1.  [0-9]   `Trimiteţi`

0 个答案:

没有答案