simplexml_load_string使用 heredoc 样式字符串参数时失败



我正在尝试一个简单的PHP XML示例,如下所示。

// code of PHP
===================================================
<?php
  $string = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
XML;
  print "BEGIN</br>"; 
  print "String:</br>{$string}";
  $xml = simplexml_load_string($string);
  print "</br>XML Obj:</br>";
  print_r($xml);
  print "</br>Var Dump:</br>";  
  var_dump($xml);
  print "</br>END"; 
?>
===================================================

输出似乎还可以

// output
===================================================
BEGIN
String:
George John Reminder Don't forget the meeting!
XML Obj:
SimpleXMLElement Object ( [to] => George [from] => John [heading] => Reminder [body] => Don't forget the meeting! )
Var Dump:
object(SimpleXMLElement)#1 (4) { ["to"]=> string(6) "George" ["from"]=> string(4) "John" ["heading"]=> string(8) "Reminder" ["body"]=> string(25) "Don't forget the meeting!" }
END
===================================================

当我尝试通过在 heredoc 样式字符串的第一行之前添加一些空格来格式化它的第一行时,在<?xml version="1.0" encoding="ISO-8859-1"?>行之后添加两个空格,那么它总是无法输出$xml对象信息。

// code of PHP
===================================================
<?php
  $string = <<<XML
  <?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
XML;
... ...
===================================================
// output
===================================================
BEGIN
String:
George John Reminder Don't forget the meeting!
XML Obj:
Var Dump:
bool(false)
END

希望有人能帮助我!!非常感谢。

这不是有效的 XML。查看文档的 XML 规范:

document    ::=     prolog element Misc*
prolog      ::=     XMLDecl? Misc* (doctypedecl Misc*)?
XMLDecl     ::=     '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

document 从哪些语法标记 XML 文档构建,从 prolog 开始。这可能包含一个XMLDecl,它再次以<?xml开头。简而言之:声明之前不允许有空格(如果有的话)。


如果你在XML的控制之下(你似乎是):只是不要这样做,我认为这是恶意的,因为每个人都必须处理代码,之后你会想知道发生了什么。

如果由于其他人正在发送损坏的 XML 文件而无法更改输入:

  • 告诉他发送格式正确的 XML 或
  • "预处理"非XML trim($string)就像在注释中已经提出的那样。

相关内容

  • 没有找到相关文章

最新更新