消除 PHP/XML 中的特殊字符问题


eliminating special character issue in php/xml

我对这个话题了解不多。我有一个每天运行的提要。它运行良好了几个月,直到昨天,它抛出了错误(在输出 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():           &lt;g:color&gt;Gold &amp;frasl; White&lt;/g:color&gt; in 

在提要文档中查看了一下,有一个&frasl;(这就是导致所有问题的原因,这是我第一次在制作提要的源文档中看到它(组件,它只是一个正斜杠/。我在网上看了一下这个问题,这是我认为合适的答案:

我现在的代码是:

function sxe($feed)
{   
$feed = file_get_contents($feed);
foreach ($http_response_header as $header)
{   
    if (preg_match("&frasl;", $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(将字符<交换为&lt>交换为&gt"交换为&quot

2(错误是:

Undefined variable: http_response_header in <b> folderpath
Invalid argument supplied for foreach() in <b> folderpath

有人知道我能做些什么来解决这个问题吗?

您尝试过的修复程序在对其进行编辑后毫无意义:

if (preg_match("&frasl;", $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的第一个参数必须是正则表达式,&frasl;不是 - 这将产生警告并且不会为$m赋值。这将是null;
  • 文件头不太可能包含字符串&frasl;
  • 您无法以这种方式获得与utf-8iso-8859-1匹配,因此将始终应用默认大小写,从而破坏$feed的格式。

仅当preg_match参数保持原样时,您复制的代码才有意义。

真正的问题似乎是您的XML文档的内容具有&frasl;,解析器无法识别。您可以将其替换为等效的&#8260;

法典:

$feed = str_replace('&frasl;', '&#8260;', $feed);