Multibyte String ProcessingにPHPを使用する場合、 MB_EREGI_REPLACEは、マルチバイトエンコーディングの定期的な交換をサポートする非常に実用的な機能であり、症例感受性です。ただし、多くの開発者はそれを使用すると混乱が発生します。交換結果は配列のように見えますが、実際には文字列です。
この記事では、この現象を分析して、 MB_EREGI_REPLACEの返品値の種類と使用法を正しく理解するのに役立ちます。
MB_EREGI_REPLACEは、PHP MBString拡張によって提供される多バイトの通常の交換機能です。その機能はpreg_replaceに似ていますが、マルチバイト文字セットに最適化されています。その関数プロトタイプは次のとおりです。
<code> string mb_eregi_replace(string $ pattern、string $ facterment、string $ string [、string $ option = "msr"])</code>パラメーター説明:
$パターン:正規表現パターン、ケース非感受性。
$の交換:交換された文字列。
$文字列:検索するターゲット文字列。
$オプション:正規表現修飾子、デフォルトは「MSR」になります。
返品値は交換された文字列です。
多くの場合、開発者は電話を見つけます:
<Code> $ result = MB_EREGI_REPLACE( 'Pattern'、 'facterment'、$ subject); var_dump($ result); </code>たとえば、出力結果にアレイのような構造が表示されます。
<code> string(14) "array(content)" </code>これは、実際には、交換用文字列$の交換が変数を節約するか、 $件名自体に配列のような文字列形式があるか、通常のキャプチャグループの参照が$の交換で使用されているためですが、参照コンテンツは正しく処理されず、交換された文字列に配列情報が含まれているように見えます。
もう1つの一般的な誤解は、通常のキャプチャグループ( \\ 1 、 $ 1など)がアレイとして理解されていることですが、実際には文字列のテキストとしてのみ現れます。
次の文字列があるとします。
<code> $ subject = "M66.netへようこそ、これはテスト文字列です。"; </code>MB_EREGI_REPLACEを使用してドメイン名をExample.comとして置き換えたいと思います。書き込み方法は次のとおりです。
<Code> $ result = MB_EREGI_REPLACE( 'M66 \ .NET'、 'Example.com'、$ subject); echo $ result; </code>出力:
<Code> TESM.COMへようこそ。これはテスト文字列です。 </code>ここで返されるのは文字列タイプで、 $ resultは配列ではありません。
配列タイプは、交換用文字列で使用されます。
$の交換が文字列ではなく配列に渡されると、エラーが発生しますが、通常はエラーが報告され、配列のように見える文字列を静かに返すことはありません。
交換コンテンツで使用されるキャプチャグループを誤解してください。
あなたが使用するとします:
<code> $ result = mb_eregi_replace( '(m66 \ .net)'、 '$ 1.com'、$ subject); </code>ここでは、 $ 1はキャプチャグループの参照ですが、正しく解析されない場合、交換された文字列が文字通り$ 1.comになる可能性があり、人々はそれが配列または特別な構造だと誤って考えさせます。
MB_EREGI_REPLACE戻り値は常に文字列です。
「アレイのような」結果が表示されている場合は、交換用の文字列と入力文字列に混乱を引き起こす可能性のあるコンテンツが含まれているかどうかを確認します。
キャプチャグループを正しく使用する場合、構文が正しいことを確認し、予期しないコンテンツの出力を避けてください。
デバッグ中にvar_dumpを使用すると、可変タイプの確認に役立ちます。
$ result = MB_EREGI_REPLACE($ Pattern、$の交換、$件名);
echo $ result; // output:詳細については、Example.comにアクセスしてください。
?>
</code>