在xml中编写变量内容

时间:2018-09-05 15:27:57

标签: php xml domdocument

这是我的问题:我想将变量(序列化的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>

有关信息,这里是$text

的值
: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";}} 

1 个答案:

答案 0 :(得分:1)

我大约80%确信这是您的问题:

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

原因是它使用0x00之类的东西来表示诸如私有和受保护属性之类的某些事物。

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

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