0

このコード

$text = 'xxx AA BB xxx xäxAAx xBBBxóx ';
$words = array('AA BB', 'AA','BB');
$text = preg_replace('/(\w*('.implode("|",$words).')\w*)/i', '[b]$1[/b]', $text);

戻る

xxx [b]AA BB[/b] xxx xä[b]xAAx[/b] [b]xBBBx[/b]óx

受信するように変更する方法

xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]

問題は英数字以外の文字にあり、ファイルは utf-8 であり、テキストは mysql からの utf-8 です。

4

2 に答える 2

1

\win php は ASCII ベースのみです。これを Unicode 文字プロパティに置き換える\p{L}と機能します。

 $text = preg_replace('/(\p{L}*('.implode("|",$words).')\p{L}*)/ui', '[b]$1[/b]', $text);

\p{L}あらゆる言語のあらゆる種類の文字に一致するUnicode 文字プロパティです

\w数字も含まれています。これが必要な場合は、次のような独自の文字クラスを作成する必要があります。

[\p{L}\d]

これは文字と数字に一致します。

于 2013-02-28T21:13:27.217 に答える
0

パターン正規表現の最後に修飾子を追加する必要がありますu

$text3 = preg_replace('/(\w*('.implode("|",$words).')\w*)/iu', '[b]$1[/b]', $text);

そして得る:

xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]

パターン修飾子はここで見ることができます

于 2013-02-28T21:10:31.320 に答える