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

时间:2017-12-20 11:28:26

标签: php html xml

我遇到了与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> 

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

Try using "&apos;"   for (') and "&quot;" for (")