Эта тема на forum.dklab.ru


sfsfsdsdssss44: Откуда берётся символ "В" (PHP+XML)
Объясните мне, пожалуйста, если сможете ... почему при формаровании xml:


<?php

$docEncoding = "utf-8";

$doc = new DOMDocument("1.0", $docEncoding);

$root = $doc->createElement("document");
$doc->appendChild($root);

$elem = $doc->createElement("test", '&#133; или &#147;');
$root->appendChild($elem);

$content = $doc->saveXML();

$content = iconv("windows-1251", $docEncoding, $content);

header("Content-Type: text/xml; charset=" . $docEncoding);

echo $content;

?>


на выходе получается:


<?xml version="1.0" encoding="utf-8"?>
<document>
<test>В… или В“</test>
</document>


т.е. почему перед символами ставится буква "В"

Надеюсь на вашу помощь.
sfsfsdsdssss44:
ааа ... ни кто не знает :)
Антон Макаренко:
Читал когда-то о проблемах с символами, зашитыми в кодах между #130 - #159. В статье написано, что их лучше не использовать вообще и предлагаются альтернативы:
http://www.cs.tut.fi/~jkorpela/www/windows-chars.html#list
sfsfsdsdssss44:
Действительно ... если вместо &#133; подставить &#8212; и поменять кодировку на windows-1251, то отображается без буквы "В".
sfsfsdsdssss44:
Если использовать такое представление сущностей, то на выходе всё как надо:


<?php

$docEncoding = "utf-8";

$doc = new DOMDocument("1.0", $docEncoding);

$root = $doc->createElement("document");
$doc->appendChild($root);

$value = iconv("windows-1251", $doc->encoding, "&#8212; или &#8230;");

$elem = $doc->createElement("test", $value);
$root->appendChild($elem);

$content = $doc->saveXML();

header("Content-Type: text/xml; charset=" . $docEncoding);

echo $content;

?>

sfsfsdsdssss44:
Вобщем, лично я пришёл к выводу, что при типографике текста лучше использовать, например: &#160; вместо &nbsp; и тогда проблем с формированием xml не будет (не придётся лишний раз обрабатывать текст).

Эта тема на forum.dklab.ru