Php 用xml编写变量内容

Php 用xml编写变量内容,php,xml,domdocument,Php,Xml,Domdocument,这是我的问题:我想将变量(一个SQL数据库序列化)放入xml文件中,但只写入了前36个字符。 当我写下所有的文本时,它是有效的 下面是php代码: public function createCache($coucou) { $xml = new \DOMDocument; $xml->load(__DIR__.'/../../tmp/cache/datas/'.$this->typeData.'.xml'); $xml->getElementsByTa

这是我的问题:我想将变量(一个SQL数据库序列化)放入xml文件中,但只写入了前36个字符。 当我写下所有的文本时,它是有效的

下面是php代码:

public function createCache($coucou)
{
    $xml = new \DOMDocument;
    $xml->load(__DIR__.'/../../tmp/cache/datas/'.$this->typeData.'.xml');
    $xml->getElementsByTagName('content')->item(0)->textContent='';

    $text = serialize($coucou);

    $xml->getElementsByTagName('content')->item(0)->textContent=$text;


    $xml->save(__DIR__.'/../../tmp/cache/datas/'.$this->typeData.'.xml');
}
和我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<cache>
    <content>a:2:{i:0;O:11:"Entity\News":7:{s:9:"</content>
</cache>

我大约80%确定这是你的问题:

PHP的
serialize()
不返回ASCII或UTF-8字符串。它是一种二进制格式,不能嵌入XML或JSON等文本格式。不要这样做

原因是它使用类似于
0x00
的东西来表示某些东西,例如私有和受保护的属性

我猜DOM会看到一个非ascii字符并“放弃”。当您输出字符串时,您看不到它,因为这些字节通常不会显示在浏览器或终端中


无论如何,使用PHP的
serialize()
格式是个坏主意。。。但是,既然它看起来像是在文件系统上使用它作为某种缓存机制,为什么要将它嵌入到XML中呢?只需单独存储序列化字符串即可。它更快,因为您不需要XML解析器。

我不明白。但只有前36个字符被书写。当我写下所有的文本时,它能工作吗?你的意思是当使用变量
$text
时,只会写入36个字符,但是如果使用字符串赋值,它会工作吗?@BenM是的,它工作了,我试过了,谢谢!我不知道,我考虑过这个问题,并尝试用UTF-8编码变量,但它不起作用,所以你知道我如何解决这个问题吗?你是100%正确的-对象的私有成员在成员名称前面加了类名;受保护成员的成员名称前面有一个“*”。这些带前缀的值两边都有空字节。
:a:2:{i:0;O:11:"Entity\News":7:{s:9:"*auteur";s:16:"LE grand manitou";s:8:"*titre";s:15:"C'est moiiiiiii";s:10:"*contenu";s:34:"ça fonctionnne!c'est genial!!!! ";s:12:"*dateAjout";s:19:"2018-08-25 11:19:11";s:12:"*dateModif";s:19:"2018-08-25 11:19:11";s:10:"*erreurs";a:0:{}s:5:"*id";s:1:"2";}i:1;O:11:"Entity\News":7:{s:9:"*auteur";s:6:"Pierre";s:8:"*titre";s:6:"Coucou";s:10:"*contenu";s:15:"Je fais un test";s:12:"*dateAjout";s:19:"2018-08-25 00:00:00";s:12:"*dateModif";s:19:"2018-08-25 00:00:00";s:10:"*erreurs";a:0:{}s:5:"*id";s:1:"1";}}