Intereting Posts
Как удалить последнюю запятую (,) из массива? Проверка репутации пользователя PHP и MySQL PDO fetchall () соображения производительности? Как использовать мой сервер в качестве прокси для загрузки файлов через PHP? фильтровать изображения с веб-страницы по размеру Как получить значение атрибута из XML-файла в PHP? Использовать PHP для динамического добавления в файл .htaccess? Сценарий дампа базы данных PHP – есть ли какие-либо проблемы? Как удалить несколько экземпляров и просто иметь один экземпляр, а несколько вызовов функций в php? Преобразование объекта stdClass в массив в PHP PHP XML, как вывести хороший формат Является ли деструктор в PHP предсказуемым? Загружайте большие файлы в Amazon S3 напрямую и добавляйте другую дату в базу данных с помощью веб-форм и PHP Как реализовать экранный скребок в PHP? Как я могу использовать WebEx URL / XML API для регистрации пользователя для события?

Пуля "•" в XML

Подобно этому вопросу, я потребляю XML-продукт, в котором есть незаконные символы. Я серьезно сомневаюсь, что могу заставить их решить проблему, но я постараюсь. Тем временем я бы хотел поработать.

Проблема в том, что в нем есть пуля. Он отображается как «â € ¢» в моем источнике. Я пробовал несколько преобразований кодировки, но не нашел комбинацию, которая работает. (Я не привык даже думать о моем типе кодирования, поэтому я вне себя от своего элемента здесь.) Итак, я попробовал следующее, и кажется, что str_replace не распознает «•». (он отображает как высокий блок в моем текстовом редакторе). Вы можете видеть прокомментированные строки, где я пробовал несколько разных вещей.

Сначала я попытался заменить str на «â €», затем изменился, и это последнее:

// deal with bullets in XML. $bullet="•"; //this was copied and pasted from transliterated text. //$data=iconv( "UTF-8", "windows-1252//TRANSLIT", $data ); //transliterate the text: //$data=str_replace($bullet,'•',$data); // replace the bullet char $data=str_replace($bullet,' - ',$data); // replace the bullet char //$data=iconv( "windows-1252", "UTF-8", $data ); // return the text to utf-8 encoding. 

Любые идеи, как удалить или заменить этот символ? Если есть функция предварительной очистки XML, это было бы здорово, и мне не пришлось бы беспокоиться об этом.

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

Персонаж, которого вы беспокоите, является частью Unicode. Поскольку XML основан на Unicode, это хорошая новость. Итак, давайте назовем то, к чему вы стремились:

  • Юникодный символ «BULLET» (U + 2022)

Итак, теперь вы говорите, что это проявляется как • . Поскольку U + 2022 закодирован как 0xE2 0x80 0xA2 в UTF-8, более или менее безопасным предположением является утверждение, что вы берете кодированную строку UTF-8 (которая является кодировкой по умолчанию, используемой в XML-битте), но управляйте программным обеспечением, которое делает его обработкой, поскольку некоторая однобайтовая кодировка, следовательно, превращает единую кодовую точку в три разных символа:

  • Unicode Character 'LATIN SMALL LETTER A WITH CIRCUMFLEX' (U + 00E2)
  • Символ Юникода «EURO SIGN» (U + 20AC)
  • Символ Юникода «CENT SIGN» (U + 00A2)

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

Если вам интересно, какие однобайтовые кодировки символов имеют эти три символа Unicode в соответствующих байтах (0xE2 0x80 0xA2), вот список. Я выделил самый популярный из них:

  • ISO-8859-15 (латынь 9)
  • OEM 858 (многоязычный латинский I + евро)
  • Windows 1252 (лат. I)
  • Windows 1254 (турецкий)
  • Windows 1256 (арабский)
  • Windows 1258 (Вьетнам)