Я забираю этот XML-канал через PHP cURL и вывод его в текстовой области на моей странице. Проблема в том, что он возвращается, полный символов моджибаке. Сам корм в порядке; только при выводе на мою страницу символы появляются.
Например, знаки фунта (£) возвращаются как £.
Я попытался бросить UTF-8 в этом вопросе, как предложено в ответе на этот вопрос.
ini_set('default_charset', 'UTF-8');
header("Content-Type:text/html; charset=UTF-8");
И в HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
и даже путем вывода ответа cURL через utf8_encode()
И все же они сохраняются.
$ch = curl_init($feed_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec($ch);
echo '<textarea>'.utf8_encode($xml).'</textarea>';
Я даже пытался обменять эти символы, но это не сработало.
$xml = strtr($xml, array('£' => ''));
Я здесь бессилен или я могу что-то сделать?
использование htmlentities
(http://php.net/manual/en/function.htmlentities.php) перед отображением содержимого XML на странице HTML также измените $ch
в $xml
в этом вызове так:
echo '<textarea>'.htmlentities($xml).'</textarea>';
utf8_encode()
будет обрабатывать ввод как latin-1 и конвертировать его в utf-8. Если ввод utf-8, это будет двойная кодировка — это то, что вы видите.
Проверьте строку XML, которую вы извлекаете из URL. Кодировка файла XML обычно указывается в инструкции обработки XML:
<?xml version="1.0" encoding="utf-8"?>
<document-element/>
Загруженный в DOM, XMLReader или SimpleXML, он всегда будет конвертирован в UTF-8. Любое значение, которое вы прочитаете с помощью API, будет UTF-8.
Если вы хотите вывести UTF-8 XML в текстовую область вашей HTML-страницы, вам нужно экранировать специальные символы.
echo '<textarea>'.htmlspecialchars($xml).'</textarea>';
Это позволит избежать символов, таких как <
а также >
, но это необходимо. Представьте себе XML, содержащий строку </textarea>
, Это сломало бы вашу HTML-страницу. Браузер расшифрует <
и другие объекты, прежде чем отображать их.