2013-10-28 46 views
6

Mam następujący fragment kodu, który wydaje się zmieniać mój zestaw znaków.Czy preg_replace() zmienia mój zestaw znaków?

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

Jednak kiedy używam [\t\n\r\f\v] jak mój wzór zamiast znaku specjalnego \s to działa dobrze:

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

Dlaczego tak jest?

+0

Obie dają dla mnie tę samą wydajność. http://ideone.com/Xo7RLR – falsetru

+0

Jakiej wersji PHP używasz? – user4035

+0

@ user4035 Wersja PHP 5.3.24 –

Odpowiedz

10

Mam ten sam problem. To z powodu UTF8.

à jest 0xc3a0 w UTF8. W PHP możesz napisać tak: "\xc3\xa0".

Z PCRE /s dopasowanie 0xa0 jak to było ASCII "Non-breaking space".

Możesz użyć u flag, aby rozwiązać problem.

$html = preg_replace("/\s/u", "", $html);