2016-11-02 9 views
1

file_get_contents($file)で文字列を取得しました。PHP preg_match/replaceがfile_get_contentsの後に文字「ndash」で機能しない

" - "( "マイナス"ではなく、HTML –)をPHPのpreg_replace関数で置き換えることができないのはなぜですか? preg_matchも機能しません。

$fileの出力は "blah - blah"です。

$str = file_get_contents($file); $str = preg_replace('/–/', 'test', $str); echo $str;

blah test blahを返すが、blah – blahを返す必要があります。

ホエイはそれで、どうしたら代わりにndashを置き換えることができますか?

ありがとうございました!

+1

試行 ' '/ \ P {}のPd/u''最初。それがうまくいかない場合、シンボルがエンティティとして文字列に存在し、シンボルをエンティティに変換する前に 'preg_replace'を実行する必要があるか、または置換する前に' html_entity_decode'を使用する必要があります。例えば。 'preg_replace( '/ - /'、 'test'、html_entity_decode($ str))' –

+0

私はまったく問題はありません。おそらく、preg関数がマルチバイトモードで動作するようにオーバーロードしていない可能性があります。 – arkascha

+2

私はあなたのコードをオンラインのPHPエディタを使って試してみましたが、うまくいきましたhttp://sandbox.onlinephpfunctions.com/code/7e5bbced117493fc6a9282444197360a1ae75dde – Hearner

答えて

1

ファイルには長いダッシュのHTMLエンティティが含まれていると思われます。平文をにするには、まずhtml_entity_decodeを使用する必要があります。

使用

$str = preg_replace('/–/', 'test', html_entity_decode($str)); 
            ^^^^^^^^^^^^^^^^^^^^^^^^ 

PHP demo

$str = 'blah – blah'; 
echo "Original: " . $str . "\n"; 
$str = preg_replace('/–/', 'test', html_entity_decode($str)); 
echo "Replaced: " . $str; 

出力:

Original: blah – blah 
Replaced: blah test blah 
関連する問題