用单引号解析XML?
时间:2020-03-06 14:43:36 来源:igfitidea点击:
我目前遇到一个问题,其中元素从我的xml文件返回且带有单引号。这导致xml_parse将其分解为多个块,例如:连线,我们已被雇用!
然后将其表示为" Get Wired,You"是一个对象,单引号是第二个对象,然后"被雇用!"作为第三。
我想做的是:
while($data = fread($fp, 4096)){ if(!xml_parse($xml_parser, htmlentities($data,ENT_QUOTES), feof($fp))) { break; } }
但这一直在打破。我可以运行一个str_replace来代替htmlentities,它可以正常运行,但是不想使用htmlentities。
有任何想法吗?
更新:
根据以下JimmyJ的回应,我尝试了以下解决方案,但没有遇到任何麻烦(仅供参考,在链接的帖子上方有一个或者两个响应,用于更新直接链接的代码):
function XMLEntities($string) { $string = preg_replace('/[^\x09\x0A\x0D\x20-\x7F]/e', '_privateXMLEntities("$x = 'Get Wired, You' $x = "'" $x = 're Hired!'")', $string); return $string; } function _privateXMLEntities($num) { $chars = array( 39 => ''', 128 => '€', 130 => '‚', 131 => 'ƒ', 132 => '„', 133 => '…', 134 => '†', 135 => '‡', 136 => 'ˆ', 137 => '‰', 138 => 'Š', 139 => '‹', 140 => 'Œ', 142 => 'Ž', 145 => '‘', 146 => '’', 147 => '“', 148 => '”', 149 => '•', 150 => '–', 151 => '—', 152 => '˜', 153 => '™', 154 => 'š', 155 => '›', 156 => 'œ', 158 => 'ž', 159 => 'Ÿ'); $num = ord($num); return (($num > 127 && $num < 160) ? $chars[$num] : "&#".$num.";" ); } if(!xml_parse($xml_parser, XMLEntities($data), feof($fp))) { break; }
更新:根据下面的汤姆的问题,魔术引号确实已被关闭。
解决方案:我最终要解决的问题是:
在为每个单独的项目/帖子/等收集数据之后,我将该数据存储到一个数组中,以供以后输出,然后清除收集期间使用的局部变量。我添加了一个步骤,检查数据是否已经存在,如果存在,我将其连接到末尾,而不是覆盖它。
因此,如果我最后得到三个块(如上所述,让我们坚持"扎紧电线,就被雇用了!"),那么我将不再做
$x = 'Get Wired, You' . "'" . 're Hired!'
要做:
set_magic_quotes_runtime(0);
这不是最佳解决方案,但似乎可以正常工作。
解决方案
我认为启用魔术引号有时会使xml解析混乱,是否启用了此功能?我们可以在运行时使用以下命令禁用此功能
##代码##编辑:如果源不是发布或者获取,则这可能不相关,但是我在PHP手册中读到,无论如何它可能导致奇怪的行为
为什么不使用诸如simplexml_load_file之类的内容轻松解析文件?