PHP:为什么preg_match在a.html文件或.php文件(unicode)中会给出不同的结果?

时间:2016-09-14 12:49:14

标签: php unicode preg-match

最近我发现当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环境。

0 个答案:

没有答案