PHP SimpleXML asXML записывает файл в кодировке ANSI - PullRequest
3 голосов
/ 04 августа 2011

Я пытаюсь записать некоторый контент в файл XML, но у меня есть проблемы со специальными символами.

Содержимое, которое я хотел бы написать, передается в сценарий через $_GET, поэтому я предполагаю, что оно правильно декодировано в содержимое UTF-8.

$write = $_GET['content'];

будет кормиться как:

file.php?content=s%F6per

В PHP я делаю следующее:

$xml = simplexml_load_file('file.xml');
$newentry = $xml -> addChild('element',$write);
$xml -> asXML($xml_filename);

Открываемый файл XML имеет кодировку UTF-8. Когда я пишу контент без этих «проблемных символов», asXML снова сохраняет файл в UTF-8. Как только я вставляю специальные символы, он сохраняется в кодировке ANSI, что приводит к путанице в файле, поскольку я больше не смогу его открыть (скрипт будет жаловаться на неправильное кодирование).

Что мне не хватает? Чтение руководства создает у меня впечатление, что я должен делать все хорошо (то есть не вмешиваться в $_GET['content']), поэтому я, к сожалению, понятия не имею.

Большое спасибо!

1 Ответ

2 голосов
/ 04 августа 2011

ваши специальные символы выглядят не как UTF-8, а как символ ISO-8859-1

см. Здесь - http://www.degraeve.com/reference/urlencoding.php

Возможное решение

$newentry = $xml->addChild('element', htmlentities($write));

или

$newentry = $xml->addChild('element', iconv('ISO-8859-1', 'UTF-8', $write));

И не по теме, пожалуйста, избегайте использования $_GET для записи чего-либо в файл или вставки в базу данных, рискованно

...