2011-07-06 3 views
1

PHPが256文字セットのみをサポートすると仮定した場合、なぜこのコードがすべて正常に動作するのか説明できますか?PHPで動作するUnicode

私はContent-Typeタグがこれらの文字をUTF-8で解釈していることを知っています。 しかし、なぜPHPがそれを動作させるのですか?

echo "匝"; 

if (preg_match('/啊/', "啊")) 
    echo "Match"; 

if (preg_match('/\w/', "啊")) 
    echo "Match"; 
+0

PHPの設定でmbstring(マルチバイト文字列)拡張機能が有効になっていますか? –

+0

1行に記載されています; mbstring.strict_encoding = Offあなたが話していることがわかりません – nEAnnam

+0

PHPは256文字セットしかサポートしていないと言われています。決して気にせず、見つけました。http://www.php.net/manual/en/language.types.string.php –

答えて

1

にあなたのコードを比較:$ 53と0x1Dの:あなたのマルチバイト文字が2バイトで含まれているため、作品/\w/

if (preg_match('/^\w$/', "啊")) 
    echo "Match"; 

正規表現。そして、最初のものは、$ 53は、有効なシングルバイト文字のように見えますS

PS:これは1つのマルチバイト文字を一致させるための有効な方法である:

var_dump(preg_match('/^\p{L}$/u', "匝", $matches)); 
+0

そのキャラクターを扱っていないのですか?そのバイトを処理する?どうしてエコーすることができますか?最初の文で – nEAnnam

+0

@nEAnnam:各文字が1バイトであると仮定して、文字を処理します。すべての質問を得ることはできません...エコーすることができます - それをエコーするからです。 – zerkms

+0

笑、申し訳ありませんええ、私はその有用なあなたの答え、病気と文字全体の1バイト – nEAnnam

0

(あなたのPCREは、Unicodeサポートでコンパイルされていることが有効でほとんどの--enable-utf8 --enable-unicode-properties)、preg_match()がユニコード文字と一致するようにします。

関連する問題