как удалить ложные символы не ascii, но сохранить пробелы и переводы строк? - PullRequest
4 голосов
/ 23 августа 2010

У меня есть несколько текстовых файлов, которые содержат некоторые символы, отличные от ASCII, я хочу удалить их, но сохранить символы форматирования.

Я пытался

$description = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $description);

Однако это, казалось, убирало переводы строк и другое форматирование, а также имело проблемы с некоторым ивритом, который затем преобразовал это

משפטים נוספים מהמומחה. נסו ותהנו! חג חנוכה שמח **************************************** חדש - האפליקציה היחידה שאומרת לך מה מצב הסוללה שלך ** NEW для версии 1.1 - эксперт разговаривает !!! *

к этому

1.4: ", ..." "..." "50 ...". . ! **************************************** - ** НОВИНКА для версии 1.1 - эксперт переговоры !!! *

Ответы [ 2 ]

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

Это не замена не-ASCII символов ... Символы Ascii находятся внутри диапазона 0-127. Поэтому в основном вы пытаетесь написать рексег для преобразования одного набора символов в другой (а не просто заменить некоторые символы, что намного сложнее) ...

Что касается того, что вы хотите сделать, я думаю, что вы хотите функцию iconv ... Вам нужно будет знать кодировку ввода, но как только вы это сделаете, вы можете сказать ей игнорировать непредставимые символы:

$text = iconv('UTF-8', 'ASCII//IGNORE', $text);

Вы также можете использовать ISO-8859-1 или любой другой целевой набор символов по вашему желанию.

1 голос
/ 23 августа 2010

То, что вы делаете, не сработает, потому что вы обрабатываете строку UTF-8, как если бы она была однобайтовой кодировкой. Вы фактически удаляете части символов . Если вам необходимо добавить флаг u в выражение регулярного выражения, чтобы активировать режим UTF-8.

Поскольку вы хотите оставить только управляющие символы и другие символы диапазона ASCII, вы должны заменить все остальные на ''. Итак:

$description = preg_replace('/[^\x{0000}-\x{007F}]/u', '', $description);

, который дает для вашего ввода:

. ! ********************* - * NEW to version 1.1 - the expert talks!!! *
...