我对这个话题了解不多。我有一个每天运行的提要。它运行良好了几个月,直到昨天,它抛出了错误(在输出 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
在提要文档中查看了一下,有一个⁄
(这就是导致所有问题的原因,这是我第一次在制作提要的源文档中看到它(组件,它只是一个正斜杠/
。我在网上看了一下这个问题,这是我认为合适的答案:
我现在的代码是:
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
有人知道我能做些什么来解决这个问题吗?
您尝试过的修复程序在对其进行编辑后毫无意义:
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文档的内容具有⁄
,解析器无法识别。您可以将其替换为等效的⁄
。
法典:
$feed = str_replace('⁄', '⁄', $feed);