除了我之前关于parsing images and text from complex xml的问题,现在唯一的问题是我没有得到正确的编码。文本在希腊语中,xml
文件具有utf-8
编码。
这是解析xml:
$xml = simplexml_load_file('myfile.xml');
$descriptions = $xml->xpath('//item/description');
foreach ( $descriptions as $description_node ) {
$description_dom = new DOMDocument();
$description_dom->loadHTML( (string)$description_node );
$description_sxml = simplexml_import_dom( $description_dom );
$imgs = $description_sxml->xpath('//img');
$text = $description_sxml->xpath('//div');
foreach($imgs as $image){
echo (string)$image['src'];
}
foreach($text as $t){
echo (string)$t;
}
}
如果我echo $description_node
,文字看起来不错,但在$description_dom
simplexml_import_dom
后,它看起来像这样:
Ïε ιÏλαμικÎÏ ÎºÎ¿Î¹Î½ÏÏηÏεÏ.
使用mb_convert_encoding
将其转为:
ýÃÂñù" ÃÂ
。我做错了什么?
答案 0 :(得分:1)
解决方案:在$description_dom = new DOMDocument();
之后,我放置了此代码。
$description_html = mb_convert_encoding($description_node, 'HTML-ENTITIES', "UTF-8");
只需将html entities
转换为UTF-8
即可。而不是
$description_dom->loadHTML( (string)$description_node );
现在我加载转换后的html
$description_dom->loadHTML( (string)$description_html );
答案 1 :(得分:0)
将此添加到HTML页面的开头,您希望在其中显示文本:
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
这应该正确渲染角色。
答案 2 :(得分:0)
不要转换任何内容..只需使用适当的声明打印
header("Content-Type: text/plain; charset=utf-8");
这就是你需要做的。在文件的顶部进行。