最近我发现当PHP代码在 .html - 文件或 .php 文件中时,preg_match会给出不同的结果!
它似乎与RegEx-Modifier “/ u”有关。设置此标志并且teststring内部是unicode字符(如示例中的“Ö”), 它会给出不同的结果。
有没有人知道为什么会这样?
示例1 - .html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$test="asdddddAÖ";
echo preg_match('/^[[:print:]\s]*$/u', $test);
?>
</body>
</html>
示例1 - 输出:
0
示例2 - .php文件
<?php
$test="asdddddAÖ";
echo "
<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"UTF-8\">
<title>Document</title>
</head>
<body>
".preg_match('/^[[:print:]\s]*$/u', $test)."
</body>
</html>";
?>
示例2 - 输出:
1
如果我从teststring中删除unicode-character,则两者的结果都是
1
我的预期。
此外,如果我从RegEx中删除 / u -Flag,两者的结果都是
0
也如期待的那样。
两个示例都在与php 5.6.24相同的apache-instance下运行。这两个文件都在编辑器中编码为UTF-8。如果有帮助,它也是Ubuntu 14.04上的Plesk 12环境。