gpt4 book ai didi

PHP SimpleXML 修改CDATA元素中的换行符

转载 作者:数据小太阳 更新时间:2023-10-29 02:47:09 28 4
gpt4 key购买 nike

我使用的是 PHP 5.3.9 版。我在使用 SimpleXML 时遇到问题,因为它在解析 xml 文件时更改了 CDATA 部分中的行结束字符。

例如:

$string = "<value><![CDATA[hello\r\nworld]]></value>";

$xml = simplexml_load_string($string);
var_dump((string)$xml);

var_dump("hello\r\nworld");

输出:

string(11) "hello world"
string(12) "hello world"

即使不查看十六进制值,您也可以立即看到 SimpleXML 解析版本正在根据字符串长度将换行符从 Windows 的“\r\n”换行符更改为 Unix 的“\n”换行符。这是一个问题,因为我想在我的 XML 文件中存储 serialize()ed 对象,但是 serialize() 存储它序列化的任何字符串的确切长度,包括换行符。当我在读取 XML 后尝试 unserialize() 字符串时,字符串长度不再正确,因为行尾已更改并且无法正确反序列化。可以通过确保清理每个输入字符串以将“\r\n”替换为“\n”来解决此问题,但这似乎不是我应该做的事情。

我的印象是 XML 解析器不应该以任何方式解析 CDATA 元素的内容。我是否误解了 CDATA 部分的指定方式,我是否以某种方式滥用了 SimpleXML,或者这是 SimpleXML 中的错误?

最佳答案

我没听懂你的意思。

但请注意,您使用了双引号。

在我的变体中:

$string = '<value><![CDATA[hello\r\nworld]]></value>';

$xml = simplexml_load_string($string);
var_dump($xml->__toString());
var_dump((string)$xml);

$xml = new SimpleXMLElement($string);
var_dump($xml->__toString());

var_dump('hello\r\nworld');

输出

string(14) "hello\r\nworld"
string(14) "hello\r\nworld"
string(14) "hello\r\nworld"
string(14) "hello\r\nworld"

但你的期望是什么?只是告诉我们它应该是什么?

关于PHP SimpleXML 修改CDATA元素中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871572/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com