我正在使用simplexml_load_file
在php中读取xml。但是,在尝试加载xml时,它会显示一个警告列表
Warning: simplexml_load_file() [function.simplexml-load-file]: <project orderno="6" campaign_name="International Relief & Development" project in /home/bluecard1/public_html/test.php on line 3
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/bluecard1/public_html/test.php on line 3
Warning: simplexml_load_file() [function.simplexml-load-file]: http://..../index.php/site/projects/:15: parser error : xmlParseEntityRef: no name in /home/bluecard1/public_html/test.php on line 3
Warning: simplexml_load_file() [function.simplexml-load-file]: ional Relief & Development" project_id="313" client_name="International Relief & in /home/bluecard1/public_html/test.php on line 3
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/bluecard1/public_html/test.php on line 3
Warning: simplexml_load_file() [function.simplexml-load-file]: http://..../index.php/site/projects/:15: parser error : xmlParseEntityRef: no name in /home/bluecard1/public_html/test.php on line 3
如何纠正以删除这些警告?
(XML是从url http://..../index.php/site/projects
&amp;生成的,加载到test.php中的一个变量。我没有写index.php的文件)
答案 0 :(得分:125)
XML很可能无效。
问题可能是“&amp;”
$text=preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $text);
将摆脱“&amp;”并用它的HTML代码版本替换它......试一试。
答案 1 :(得分:62)
找到此here ...
问题: XML解析器返回错误“xmlParseEntityRef:noname”
原因:在XML文本的某处有一个迷路'&amp;'(&符号)。一些文字&amp;更多文字
<强>解决方案:强>
- 解决方案1:取下&符号。
- 解决方案2:对&符号进行编码(将'&amp;'字符替换为'&amp; amp;')。记得在阅读XML时解码 文本。
- 解决方案3:使用CDATA部分(解析器将忽略CDATA部分内的文本。)例如。 &lt;![CDATA [some text&amp;多一点 文本]&GT;
注意:'&amp;''&lt;'如果处理不当,'&gt;'会产生问题。
答案 2 :(得分:9)
尝试使用此功能首先清理HTML:
$html = htmlspecialchars($html);
特殊字符通常在HTML中表示不同,它可能会使编译器感到困惑。就像&
变为&
。
答案 3 :(得分:6)
XML无效。
<![CDATA[
{INVALID XML}
]]>
根据{{3}} ,CDATA应该包含所有特殊的XML字符
答案 4 :(得分:6)
我使用合并版本:
var valJson = $('#peoplePickerDiv1_TopSpan_HiddenInput').val();
var parsed = $.parseJSON(valJson);
console.log(parsed[0].Key);
答案 5 :(得分:6)
<强>问题强>
simplexml_load_file
在尝试从URL加载XML文件时抛出解析错误parser
error : xmlParseEntityRef
。<强>原因强>
&
值
而不是 &
。很可能还有其他错误在这个时间点并不明显。我们控制之外的事情
simplexml_load_file
函数,但看起来我们无法控制XML的创建方式。 simplexml_load_file
处理
XML文件无效。它不会给我们留下很多选择,除了
修复XML文件本身。可能的解决方案
将无效的XML转换为有效的XML。可以使用 PHP tidy extension
来完成。可以从http://php.net/manual/en/book.tidy.php
确定扩展程序存在或已安装后,请执行以下操作。
/**
* As per the question asked, the URL is loaded into a variable first,
* which we can assume to be $xml
*/
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<project orderno="6" campaign_name="International Relief & Development for under developed nations">
<invalid-data>Some other data containing & in it</invalid-data>
<unclosed-tag>
</project>
XML;
/**
* Whenever we use tidy it is best to pass some configuration options
* similar to $tidyConfig. In this particular case we are making sure that
* tidy understands that our input and output is XML.
*/
$tidyConfig = array (
'indent' => true,
'input-xml' => true,
'output-xml' => true,
'wrap' => 200
);
/**
* Now we can use tidy to parse the string and then repair it.
*/
$tidy = new tidy;
$tidy->parseString($xml, $tidyConfig, 'utf8');
$tidy->cleanRepair();
/**
* If we try to output the repaired XML string by echoing $tidy it should look like.
<?xml version="1.0" encoding="utf-8"?>
<project orderno="6" campaign_name="International Relief & Development for under developed nations">
<invalid-data>Some other data containing & in it</invalid-data>
<unclosed-tag></unclosed-tag>
</project>
* As you can see that & is now fixed in campaign_name attribute
* and also with-in invalid-data element. You can also see that the
* <unclosed-tag> which didn't had a close tag, has been fixed too.
*/
echo $tidy;
/**
* Now when we try to use simplexml_load_string to load the clean XML. When we
* try to print_r it should look something like below.
SimpleXMLElement Object
(
[@attributes] => Array
(
[orderno] => 6
[campaign_name] => International Relief & Development for under developed nations
)
[invalid-data] => Some other data containing & in it
[unclosed-tag] => SimpleXMLElement Object
(
)
)
*/
$simpleXmlElement = simplexml_load_string($tidy);
print_r($simpleXmlElement);
<强>注意强>
开发人员应该尝试将无效的XML与有效的XML(由整洁生成)进行比较,以确保在使用整洁后没有任何不良副作用。 Tidy做得非常好,但是从视觉上看它并且100%确定它永远不会伤害。在我们的例子中,它应该像将$ xml与$ tidy进行比较一样简单。
答案 6 :(得分:3)
这是由于人物搞乱数据造成的。使用htmlentities($yourText)
为我工作(我在xml文档中有html代码)。请参阅http://uk3.php.net/htmlentities。
答案 7 :(得分:0)
这解决了我的问题:
$description = strip_tags($value['Description']);
$description=preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $description);
$description= preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $description);
$description=str_replace(' & ', ' & ', html_entity_decode((htmlspecialchars_decode($description))));
答案 8 :(得分:0)
如果您在使用opencart尝试编辑时遇到此问题
目录/控制器/扩展/原料/ google_sitemap.php 有关详细信息以及如何操作,请参阅:xmlparseentityref-no-name-error