MB_EREGI_REPLACE()は、PHPのマルチバイト文字列を扱う際に非常に便利な機能です。 EREGI_REPLACE()と同様に機能しますが、UTF-8エンコードされた中国のテキストなどのマルチバイト文字列に特別に使用されます。ただし、実際に使用すると、一般的な問題が発生する可能性があります。MB_EREGI_REPLACE ()を使用しているときに交換前後に表示される余分なスペースをどのように削除できますか?
たとえば、 [url] http://m66.net/page [/url]をHTMLリンクでテキストに置き換え、置換結果がフロントスペースとリアスペースの影響を受けたり、余分なスペースを持ち込んだりしないようにします。この時点で、 TRIM()は役に立つことができます。
まず、基本的な交換の例を見てみましょう。
<code> $ text = "ここにリンクがあります:[url] http://m66.net/page [/url]、クリックしてください。"; $ pattern = ' (。*?) ';
$ facterment = '<a href = "\ 1"> link </a>';
$ result = MB_EREGI_REPLACE($ Pattern、$ facterment、$ text);
echo $ result;
</code>
出力の結果は次のとおりです。
これがリンクです:<a href="http://m66.net/page">リンク</a> ,クリックしてください。
表面からは問題ないようですが、 [URL]タグの中央にコンテンツの前後にスペースがある場合、例:
[URL] http://m66.net/page [/URL]
交換後のHTMLリンクのHREF属性には追加のスペースが含まれます。これにより、リンクが正しく開かないか、例外を表示しない場合があります。
この問題を解決するには、コールバック関数でTRIM()を使用する必要があります。残念ながら、 MB_EREGI_REPLACE()は、コールバック関数を直接サポートしていません。ただし、 MB_EREG_REPLACE_CALLBACK()を使用して、同じ目的を達成できます。
変更されたコードは次のとおりです。
<code> $ text = "ここにリンクがあります:[url] http://m66.net/page [/url]、クリックしてください。";$ pattern = ' (。*?) ';
$ result = mb_ereg_replace_callback(
$パターン、
function($ matches){
$ url = trim($ matches [1]);
return '<a href = "'。$ url。 '"> link </a>';
}、
$テキスト
);
echo $ result;
</code>
出力は次のようになります。
これがリンクです:<a href="http://m66.net/page">リンク</a> ,クリックしてください。
今回は、リンクに余分なスペースがなく、パフォーマンスはより安定してプロフェッショナルになります。
MB_EREGI_REPLACE()は、ケースに依存しないマルチバイトの交換を扱う場合に便利ですが、 preg_replace_callback()のようなカスタムロジックを渡すことはできません。スペースの問題を解決するために、ベストプラクティスはMB_EREG_REPLACE_CALLBACK()を使用することです。これは、 TRIM()などの文字列処理関数を使用して、マッチング結果のより柔軟な処理を行うことができます。このようにして、出力リンクまたはその他の交換コンテンツがより正確で堅牢であり、ユーザーエクスペリエンス全体を改善することを保証できます。