PHP и проблема кодировки символов с символом - PullRequest
4 голосов
/ 27 августа 2010

У меня проблема с тем, что PHP (5.2) не может найти символ 'Â' в строке, хотя он явно там есть.

Я понимаю, что основная проблема связана с кодировкой символов, но, к сожалению, я не могу контролировать исходный контент. Я получаю его как UTF-8, с этими символами уже в строке.

Я бы просто хотел удалить его из строки. strpos (), str_replace (), preg_replace (), trim () и т. д. Не удается правильно идентифицировать его.

Моя строка такая:

"Â  Â  Â  A lot of couples throughout the World "

Если я сделаю это:

$string = str_replace('Â','',$string);

Я понял:

"� � � A lot of couples throughout the World"

Я даже попробовал utf8_encode () и utf8_decode () перед str_replace, но безуспешно.

Какое решение? Я бросил все, что я могу найти в этом ...

Ответы [ 3 ]

4 голосов
/ 27 августа 2010
$string = str_replace('Â','',$string);

Как закодировано это «Â»?Если ваш файл сценария сохранен как iso-8859-1, строка 'Â' кодируется как однобайтовая последовательность xC2, а представление (/ one) utf-8 - xC3 x82.php's str_replace () работает на байтовом уровне, то есть он только «знает» однобайтовые символы.

см. http://docs.php.net/intro.mbstring

3 голосов
/ 27 августа 2010

Я использую это:

function replaceSpecial($str){
$chunked = str_split($str,1);
$str = ""; 
foreach($chunked as $chunk){
    $num = ord($chunk);
    // Remove non-ascii & non html characters
    if ($num >= 32 && $num <= 123){
            $str.=$chunk;
    }
}   
return $str;
} 
1 голос
/ 27 августа 2010

со страницы комментариев к руководству PHP:

http://www.php.net/manual/en/function.preg-replace.php#96847

и из StackOverflow:

Удаление акцентов без использования iconv

...