Становится Почему?Проблема с кодировкой XML ISO? - PullRequest
2 голосов
/ 08 сентября 2011

Я с радостью сохраняю вещи в мои XML-файлы через веб-форму, которая урезана PHP и SimpleDOM.php

Мне нужно сохранять элементы с английскими ценами, поэтому мне нужен знак английского фунта.Однако, когда я делаю это, происходит 2 вещи:

  1. возвращает сохраненную цену как £ 1007 *

  2. , если я сохраню ее снова без каких-либо другихизменяет синтаксический анализатор SimpleDom, затем barfs и удаляет любой другой контент в XML-файле, кроме знака английского фунта.

Верхняя строка в моем XML-файле выглядит как

<?xml version="1.0" encoding="ISO-8859-1"?>

Внутри XML-файла символ £ сохраняется как

&amp;Acirc;&amp;pound;

Насколько я могу судить, в iso-8859-1 должен быть знак «£», поэтому он очень озадачен, почему в него входит этот Acirc....

Я видел в другой ветке, что кто-то сказал, что попробуйте использовать 8859-15, но это ничего не меняет.

Любые люди, идеи?

Приветствия, Jas (полное примечание квсе эти вещи кодирования)

Ответы [ 2 ]

9 голосов
/ 08 сентября 2011

Кодовая точка Unicode для £ - это U + 00A3.В кодировке UTF-8 это 0xC2 0xA3.Теперь в ISO-8859-1 0xC2 - это Å, а 0xA3 - это £.Итак, где-то в потоке то, что вы вводите, становится UTF-8, что интерпретируется как ISO-8859-1.Вы смотрели на то, как «форма» кодирует данные до достижения вашего PHP-кода.

И, кроме того, что этот SimpleDOM делает с сущностями?Â и £ не являются действительными объектами XML без объявления.SimpleDOM добавляет объявления?

1 голос
/ 13 сентября 2011

Ответ сорока двух определенно устранил одну из проблем ... Я помещал кодировку = iso-8859-1 в документ xml, но использовал utf-8 в тег мета-содержимого типа HTML.Еще одна вещь, на которую стоит обратить внимание, если кто-нибудь сталкивается с этим ответом.У меня также были серьезные проблемы с изогнутой цитатой из документа Windows (копирование текста из Word 2007 в поле формы html на моем сайте).Существует большая разница между изогнутой цитатой и апострофом.На английских клавиатурах Word интерпретирует верхнюю черту (апостроф) как одну изогнутую кавычку.ISO-8859-1 не имеет такого объекта (его код в Windows-1252 «стандарт»).Это убивало мои XML-документы, так как они были проанализированы PHP из поля формы.Решение было простым:

$var = htmlentities($var,ENT_QUOTES, "Windows-1252");

Другие люди упоминали htmlentites и striptags ... но мне потребовалось 4 полдня, чтобы собрать все это вместе.Надеюсь, кто-нибудь сэкономит время.

...