Как заменить искаженные символы в строке? - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть этот текст ...

- Я не пытаюсь быть заслуживающим доверия, - признается Дэвид с улыбкой, расширяющейся:

... и я хотел бы удалить этих забавных персонажей, я пробовал str_replace(), но это не работает.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
</head> 

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

php utf8_ (de) кодирует, преобразует iso-8859-1 в utf-8, а противоположные и обычные функции управления строками не являются многобайтовыми (что может быть utf-8). Либо вы используете функции, специфичные для mb_strings, либо включаете кодирование с определенными параметрами.

// комментарий, если я ошибаюсь

2 голосов
/ 22 сентября 2011

Возможно, вы обрабатывали текст в другой кодировке, чем в исходной кодировке.

Так что, если текст UTF-8, вы в настоящее время не обрабатываете его как UTF-8.Самый простой способ - отправить заголовок, такой как ...

header('Content-Type: text/html; charset=UTF-8');

Вы также можете добавить элемент meta, но убедитесь, что это первый дочерний элемент вашего элемента head.

Вам нужно исправить это в источнике, а не пытаться исправить его позже (что никогда не будет работать хорошо).

0 голосов
/ 22 сентября 2011

Ну, вы используете другую кодировку символов, которую вам, вероятно, следует использовать (вы должны использовать кодировку utf-8), поэтому я бы изменил ее, вместо того, чтобы просто исправить это на месте с помощью быстрого исправления (вы Таким образом, у вас будет меньше проблем в целом).


Если вы действительно хотите исправить это с помощью PHP, вы можете использовать функцию ctype_alpha (); Вы должны быть в состоянии сделать что-то вроде этого:

$theString = "your text here"; // your input string

$newString = ""; // your new string
$i = 0;
while($theString[$i]) // while there are still characters in the string
{
    if(ctype_alpha($theString[$i]) // if it's a character in your current set
    { 
       $newString .= $theString[$i]; // add it to the new string, increment pointer, and go to next loop iteration
       $i++;
       continue; 
    } // if the specific character at the $i index is an alphabetical character, add it to the new string
    else
    {
       $i++;
    } // if it's a bad character, just move the pointer up by one for the next iteration
}

Тогда используйте $ newString, как хотите. На самом деле, просто измените кодировку вашего персонажа вместо того, чтобы делать это таким образом. Вы хотите, чтобы кодировка была одинаковой во всем проекте.

...