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 で charset のデフォルトが 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 ライブラリを使用しています)。PCREphp -iセクションを入力して検索し、バイナリが使用するバージョンに関する詳細情報を取得します。

于 2013-10-02T08:52:33.257 に答える