2013-10-28 2 views
6

私はキャラクターセットを変更しているように見える次のコードを持っています。私が代わりに特殊文字\sの私のパターンとして[\t\n\r\f\v]を使用する場合preg_replace()は自分のキャラクタセットを変更しますか?

 $html = "à"; 
    echo $html; // result: à 
    $html = preg_replace("/\s/", "", $html); 
    echo $html; // result: ? 

はしかし、それが正常に動作します:

 $html = "à"; 
    echo $html; // result: à 
    $html = preg_replace("/[\t\n\r\f\v]/", "", $html); 
    echo $html; // result: à 

なぜですか?

+0

どちらも同じ出力です。 http://ideone.com/Xo7RLR – falsetru

+0

使用しているPHPのバージョンは? – user4035

+0

@ user4035 PHPバージョン5.3.24 –

答えて

10

私は同じ問題があります。それはUTF8のためです。

àは、UTF8では0xc3a0です。 PHPでは、次のように書くことができます:"\xc3\xa0"

PCREの場合、/s0xa0と同じですが、ASCII "非改行スペース"のようです。

u flagを使用して問題を解決できます。

$html = preg_replace("/\s/u", "", $html); 
関連する問題