从XML文件中提取文本并显示文本时,单引号和双引号将转换为一些垃圾字符

问题描述 投票:0回答:2

我遇到了与HTML和XML相关的奇怪问题。请让我知道如何解决它。

示例文本:它“不显示”很好。

当使用HTML或PHP直接在页面上打印时输出:它“不显示”正常。

从生成的XML文件中获取和打印时输出:它不显示正常。

XML文件包含此声明:<? xml version= 1.0 encoding= iso-8859-1 ?>

当我尝试在上面的XML文件声明中使用utf-8而不是iso-8859-1时,文本不会显示在网页上。

编辑#1:下面是用于显示XML文件数据的代码。

$result_test="";
$result_test=readXml($XML_FILE_PATH."test.xml",$XML_ROOT);
<?php
$arr_test=array_keys($result_test);
if($arr_test[0]!="XML_ROOT") { ?>
    <?php 
    while(list($key, $val) = each($result_test)) {
        if(is_array($val)) { ?>
        <div><?php print($result_test[$key]["DESC"]);?>/div>
    <?php } } ?>        

编辑#2:下面是XML文件的数据。方形垃圾字符在.xml文件中显示而不是单引号和双引号但是当我把这个字符放在这里时,它被删除所以无法显示。

<?xml version="1.0" encoding="ISO-8859-1"?>
<XML_ROOT>
<P_1>
    <DESC><![CDATA[its not displaying fine.]]</DESC>
</P_1>
</XML_ROOT> 
php html xml
2个回答
1
投票

1)CDATA部分无效(缺少>

格式:<![CDATA[my data]]>

2)如何读取和转换ISO到UTF-8的值的示例:

$source = '<?xml version="1.0" encoding="ISO-8859-1"?>
<XML_ROOT>
<P_1>
    <DESC><![CDATA[its not displaying fine.]]></DESC>
</P_1>
</XML_ROOT>';

$dom = new DOMDocument('1.0', 'ISO-8859-1');
$dom->preserveWhiteSpace = false;

$dom->loadXML($source);

$xpath = new DOMXPath($dom);
$desc = $xpath->query('/XML_ROOT/P_1/DESC')->item(0)->nodeValue;

// encode iso to utf8
if (!mb_check_encoding($desc, 'UTF-8')) {
    $desc = mb_convert_encoding($desc, 'UTF-8');
}

echo $desc;

0
投票

您需要使用转义字符,以便将引号视为文本。

Try using "&apos;"   for (') and "&quot;" for (")
© www.soinside.com 2019 - 2024. All rights reserved.