&之间的新线条特征和放大器

时间:2017-04-20 05:08:18

标签: php regex xml

我有一个xml字符串,其中包含一些字符,如& amp,& gt,& lt.Now,每当我尝试使用simplexml_load_string将其转换为SimpleXML时,它返回bool(false)。我检查了xml字符串,发现一切都很好,除了'&'之间有换行符。和'amp'和类似的其他角色。我从xml validator验证了相同的内容。它抛出错误:实体名称必须紧跟'&'在实体参考中。

所以,我想知道是否有任何工具/ api /方法来修复它,或者我应该使用简单的str_replace()来完成工作。

由于

1 个答案:

答案 0 :(得分:2)

您的XML文件首先应该没有此类问题,真正的修复通过修复产生这些空白的代码来消除问题的根源错误的地方。

作为快速修补程序,您可以使用一个正则表达式,它会找到&后跟一个或多个空格,然后是实体名称。请注意,regex喜欢

preg_replace('~&\s+(#\d+;|(?:[gl]t|a(?:mp|pos)|quot);)~', '&$1', $s)

只会处理数字和预定义的实体,所有手动定义的实体都必须作为替代方案添加到(#\d+;|(?:[gl]t|a(?:mp|pos)|quot);)组。

模式详情

  • & - &符号
  • \s+ - 1+空格
  • (#\d+;|(?:[gl]t|a(?:mp|pos)|quot);) - 第1组匹配
    • #\d+; - #,1位数,;
    • | - 或
    • (?:[gl]t|a(?:mp|pos)|quot); - gtltampaposquot后跟;(= {{1 }})。