我在解析原子facebook Feed时遇到问题。
使用:
PHP的DOMDocument。
错误:
警告:DOMDocument :: loadXML():xmlParseEntityRef:实体中没有名称,第12行: 警告:DOMDocument :: loadXML():xmlParseEntityRef:实体中没有名称,行:12 警告:DOMDocument :: loadXML():实体'euro'未在Entity中定义,第16行 警告:DOMDocument :: loadXML():实体'acute'未在Entity中定义,第16行 警告:DOMDocument :: loadXML():实体'euro'未在Entity中定义,第16行 警告:DOMDocument :: loadXML():实体'acute'未在Entity中定义,第16行 注意:尝试在第76行的......中获取非对象的属性
不幸的是,在Feed代码中找不到上面提到的实体。不那么简单......问题必须是不同的。可以使用相同的代码解析其他提要,而不会出现任何问题。所以,我认为问题是内容标签中Facebook的HTML中存在的问题。 这可能是什么?如何解决?
<content type="html"><div class="ext_media clearfix has_extra has_thumb"><div class="title"><a href="http://www.youtube.com/watch?v=BPq58p0K6DM&feature=youtu.be" target="_blank" rel="nofollow" title="http://www.youtube.com/watch?v=BPq58p0K6DM&amp;feature=youtu.be" onmousedown="UntrustedLink.bootstrap($(this), "-AQBiGfHA", event, bagof(null));">Did you know there were this many satellites in orbit VIDEO</a></div><div class="url">Quelle: www.youtube.com</div><div class="story_posted_item clearfix"><div class="extra"><div class="share_thumb"><a href="http://www.youtube.com/watch?v=BPq58p0K6DM&feature=youtu.be" target="_blank" rel="nofollow" onmousedown="UntrustedLink.bootstrap($(this), "2AQBCjOTV", event, bagof(null));"><img class="img_loading img" src="http://i3.ytimg.com/vi/BPq58p0K6DM/default.jpg" alt="" onload="var img = this; onloadRegister(function() { adjustImage(img); });" id="share_thumb_257759307568958" /></a></div></div></div></div></content>
查看完整供稿代码 here。 (参见Feed in browser。)
我正在使用的完整PHP代码:
$feed_xml_str = ...;
print '<pre>';
print_r( xmlstr_to_array($feed_xml_str) );
print '</pre>';
function xmlstr_to_array($xmlstr) {
$doc = new DOMDocument();
$doc->loadXML($xmlstr);
return domnode_to_array($doc->documentElement);
}
function domnode_to_array($node) {
$output = array();
switch ($node->nodeType) {
case XML_CDATA_SECTION_NODE:
case XML_TEXT_NODE:
$output = trim($node->textContent);
break;
case XML_ELEMENT_NODE:
for ($i=0, $m=$node->childNodes->length; $i<$m; $i++) {
$child = $node->childNodes->item($i);
$v = domnode_to_array($child);
if(isset($child->tagName)) {
$t = $child->tagName;
if(!isset($output[$t])) {
$output[$t] = array();
}
$output[$t][] = $v;
}
elseif($v) {
// >>>>> WJ: OUT COMMENTED CODE >>>>>
//$output = (string) $v;
// >>>>> WJ: ADDED CODE >>>>>
if($node->attributes->length) {
$a = array();
foreach($node->attributes as $attrName => $attrNode) {
$a[$attrName] = (string) $attrNode->value;
}
$output['@attributes'] = $a;
$output['@value'] = (string) $v;
}
else
$output = (string) $v;
// >>>>> WJ: MODIFIED CODE END >>>>>
}
}
if(is_array($output)) {
if($node->attributes->length) {
$a = array();
foreach($node->attributes as $attrName => $attrNode) {
$a[$attrName] = (string) $attrNode->value;
}
$output['@attributes'] = $a;
}
foreach ($output as $t => $v) {
if(is_array($v) && count($v)==1 && $t!='@attributes') {
$output[$t] = $v[0];
}
}
}
break;
}
return $output;
}
答案 0 :(得分:4)
ini_set("user_agent","my_awesome_magic_user_agent_which_can_be_anyhing");
或者:
stream_context_set_default(
array(
"http"=>array(
"user_agent"=>"whatever"
)
));
下次,您可能希望echo
您的XML字符串,以查看实际情况......