Php &;之间的新行字符;和放大器

Php &;之间的新行字符;和放大器,php,regex,xml,Php,Regex,Xml,我有一个xml字符串,其中包含一些字符,如&、>、<。现在,每当我尝试使用simplexml\u load\u字符串将其转换为simplexml时,它都会返回bool(false)。我检查了xml字符串,发现除了在“&”和“amp”之间有换行符以及类似的其他字符外,一切都很好。我也验证过了。它抛出错误:实体名称必须紧跟实体引用中的“&” 所以,我想知道是否有任何工具/api/方法来修复它,或者我应该使用simple str_replace()来完成这项工作 谢谢您的XML文件本来就

我有一个xml字符串,其中包含一些字符,如&、>、<。现在,每当我尝试使用simplexml\u load\u字符串将其转换为simplexml时,它都会返回bool(false)。我检查了xml字符串,发现除了在“&”和“amp”之间有换行符以及类似的其他字符外,一切都很好。我也验证过了。它抛出错误:实体名称必须紧跟实体引用中的“&”

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


谢谢

您的XML文件本来就不应该有这样的问题,真正的解决办法是通过修复在错误位置产生这些空白的代码来消除问题的根源

作为快速修补程序,您可以使用正则表达式来查找
&
,后跟1个或多个空格,然后是实体名称。请注意

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

图案细节

  • &
    -一个符号和
  • \s+
    -1+空格
  • (#\d+|)(?:[gl]t | a(?:mp | pos)|)
    -第1组匹配
    • #\d+-
      ,1+位,
    • |
      -或
    • (?:[gl]t|a(?:mp|pos)|quot)-
      gt
      lt
      amp
      apos
      quot
      后接
      (=
      (?:gt;| amp;| apos;| quot;)

您的XML文件首先不应该有这样的问题,真正的解决办法是通过修复在错误位置产生这些空白的代码来消除问题的根源

作为快速修补程序,您可以使用正则表达式来查找
&
,后跟1个或多个空格,然后是实体名称。请注意

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

图案细节

  • &
    -一个符号和
  • \s+
    -1+空格
  • (#\d+|)(?:[gl]t | a(?:mp | pos)|)
    -第1组匹配
    • #\d+-
      ,1+位,
    • |
      -或
    • (?:[gl]t|a(?:mp|pos)|quot)-
      gt
      lt
      amp
      apos
      quot
      后接
      (=
      (?:gt;| amp;| apos;| quot;)

修复损坏的XML的最佳方法始终是修复创建它的软件。否则,要记住的规则是:如果它不是XML,请使用非XML工具修复它。如果只需要删除
&
和实体名称之间的空白,请使用
preg_-replace(“~&\s+(#\d+)(?:[gl]t|a(?:mp | pos)| ~”、“&$1'、$s)
(请参阅)。应将手动定义的实体名称添加为
(…|…)
组的替代项。修复损坏的XML的最佳方法始终是修复创建它的软件。否则,要记住的规则是:如果它不是XML,请使用非XML工具修复它。如果只需要删除
&
和实体名称之间的空白,请使用
preg_-replace(“~&\s+(#\d+)(?:[gl]t|a(?:mp | pos)| ~”、“&$1'、$s)
(请参阅)。手动定义的实体名称应作为
(…|…)
组的替代项添加。谢谢@Wiktor。实际上,xml文件很旧,是由遗留软件生成的。谢谢@Wiktor。实际上,xml文件很旧,是由遗留软件生成的。
preg_replace('~&\s+(#\d+;|(?:[gl]t|a(?:mp|pos)|quot);)~', '&$1', $s)