5

この質問は、UTF-8文字列を検出する方法を尋ねました-文字列にutf8デコードまたはエンコードを適用する必要があるかどうかを検出する方法は?

解決策はこれでした:

if (preg_match('!!u', $string))
{
   // this is utf-8
}
else 
{
   // definitely not utf-8
}

「!!u」の表現を分解する方法がわかりません。PHPのPCREのものをすべてクリックしましたが、「!」の説明を見逃している可能性があります。マークと「u」-何か。私はそれをperlのYAPE::Regex :: Explain(このPerl正規表現を説明してくださいに見られるように)を通して実行しようとしましたが、意味のあるものを得ることができませんでした[私はperlの専門家ではありません-私がそれを与えたかどうかはわかりません正しい式/文字列]。

それで...どのように正確に機能しpreg_match('!!u', $string)ますか?

4

2 に答える 2

7

これは単なる空の正規表現です。!区切り文字uあり、はmodfierです。

それが機能する理由については、PHPマニュアルのu修飾子の説明から(私の強調):

この修飾子は、Perlと互換性のないPCREの追加機能をオンにします。パターン文字列はUTF-8として扱われます。この修飾子は、UnixではPHP 4.1.0以降、win32ではPHP4.2.3から使用できます。PHP 4.3.5以降、パターンのUTF-8の有効性がチェックされます。

于 2012-06-01T18:46:38.280 に答える
5

!代わりに区切り文字として使用されてい/ます。私はあなたのためにこれを書き直します//u、同じことです。はu、パターンをutf8として扱う修飾子です。

于 2012-06-01T18:46:57.047 に答える