我对这个话题不太了解。我有一个每天都有的饲料。它一直运行好几个月直到昨天,它抛出错误(在输出xml文档中):
<b>Warning</b>: simplexml_load_string(): Entity: line 93191: parser error : Entity 'frasl' not defined in <b> folderpath
<b>Warning</b>: simplexml_load_string(): <g:color>Gold &frasl; White</g:color> in
看了一下饲料文件中有一个⁄
(这是什么导致了我认为的所有问题,这是我第一次在使用哪个饲料的源文档中看到它)组件哪个只是一个正斜杠/
。我在网上看了一下这个问题,这是我认为合适的answer:
我现在的代码是:
function sxe($feed)
{
$feed = file_get_contents($feed);
foreach ($http_response_header as $header)
{
if (preg_match("⁄", $header, $m))
{
switch (strtolower($m[1]))
{
case 'utf-8':
// do nothing
break;
case 'iso-8859-1':
$feed = utf8_encode($feed);
break;
default:
$feed = iconv($m[1], 'utf-8', $feed);
}
break;
}
}
return simplexml_load_string($feed);
}
我改变了一点以满足我的需要。这会输出xml中的错误:
1)它将角色<
换成<
,将>
换成>
,将"
换成"
。
2)错误是:
Undefined variable: http_response_header in <b> folderpath
Invalid argument supplied for foreach() in <b> folderpath
任何人都知道我可以做些什么来解决这个问题?
答案 0 :(得分:1)
在您对其进行编辑后,您尝试过的修补程序没有任何意义:
if (preg_match("⁄", $header, $m))
{
switch (strtolower($m[1]))
{
case 'utf-8':
// do nothing
break;
case 'iso-8859-1':
$feed = utf8_encode($feed);
break;
default:
$feed = iconv($m[1], 'utf-8', $feed);
}
break;
}
由于:
preg_match
的第一个参数必须是正则表达式,而⁄
不是 - 这会产生警告而不会为$m
赋值。它将是null
; ⁄
utf-8
或iso-8859-1
以这种方式获得匹配,因此将始终应用默认大小写,从而破坏$feed
的格式。如果您保留preg_match
参数,那么您复制的代码才有意义。
真正的问题似乎是XML文档的内容具有⁄
,解析器无法识别它。您可以将其替换为its equivalent ⁄
。
代码:
$feed = str_replace('⁄', '⁄', $feed);