удалить UTF-8 графических пространств с php - PullRequest
1 голос
/ 28 апреля 2010

У меня есть несколько xml-файлов с пробелами в них, мне нужно удалить их с помощью php. Код utf-8 для них - e2 80 a9. Если я не ошибаюсь, php, похоже, не нравятся 6-байтовые символы utf-8, но пока, по крайней мере, я не могу найти способ удаления пространств с помощью функций, таких как preg_replace.

У кого-нибудь есть советы или даже лучшее решение этой проблемы?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2010

Вы пробовали preg_replace('/\x{2007}/u', '', $stringWithFigureSpaces);?

U+2007 - это кодовая точка Unicode для FIGURE SPACE .

Пожалуйста, смотрите мой ответ на аналогичную тему юникод-регулярных выражений с PHP, которая включает информацию о \x{FFFF} -синтаксисе.

По поводу вашего комментария о нерабочих - на моей машине отлично работает следующее:

$ php -a
Interactive shell

php > $str = "a\xe2\x80\x87b";  // \xe2\x80\x87 is the FIGURE SPACE
php > echo preg_replace('/\x{2007}/u', '_', $str); // \x{2007} is the PCRE unicode codepoint notation for the U+2007 codepoint
a_b

Какая у вас версия PHP? Вы уверены, что персонаж - это FIGURE SPACE вообще? Можете ли вы запустить следующий фрагмент на вашей строке?

for ($i = 0; $i < strlen($str); $i++) {
    printf('%x ', ord($str[$i]));
}

На моей тестовой строке это выводит

61 e2 80 87 62
a  |U+2007|  b

РЕДАКТИРОВАТЬ после комментария OP:

\xe2\x80\xa9 - это РАЗДЕЛИТЕЛЬ ПАРАГРАФА , который является кодовой точкой Unicode U+2029, поэтому ваш код должен быть preg_replace('/\x{2029}/u', '', $stringWithUglyCharacter);

1 голос
/ 28 апреля 2010

Может быть, функция mb_convert_encoding может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...