0

虽然pcretest -C我的服务器中的结果显示 pcre 支持 utf8,但即使我输入匹配的模式,以下代码也总是返回 false,并且似乎无法识别 utf-8 字符:

   $pattern = '/^\x{06F0}?\x{06F9}\d{9}$/u';
   if (!preg_match($pattern, $value)) { // $value is a function parameter
      return false;
   }
   return true;

输出pcretest -C

PCRE version 7.8 2008-09-05
Compiled with
  UTF-8 support
  Unicode properties support
  Newline sequence is LF
  \R matches all Unicode newlines
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

PHP版本:5.3.2

此代码在我的本地主机中按预期工作。

有什么建议吗?

4

1 回答 1

2

在这里工作(注意html_entity_decode的字符集默认更改为 PHP 5.4 中的 UTF-8):

$ cat a.php
<?php
$pattern = '/^\x{06F0}?\x{06F9}\d{9}$/u';
var_dump(preg_match($pattern, html_entity_decode('&#x6F9;123456789')));
$ php a.php 
int(1)

请注意,默认情况下,PHP 不使用系统 PCRE 库(尽管许多发行版出于显而易见的原因使用系统 PCRE 库)。键入php -i并查找 PCRE 部分以获取有关您的二进制文件使用的版本的更多信息。

于 2013-10-02T08:52:33.257 回答