这是我的问题:我想将变量(序列化的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";}}
答案 0 :(得分:1)
我大约80%确信这是您的问题:
PHP的serialize()
不返回ASCII或UTF-8字符串。它是一种二进制格式,您不能将其嵌入XML或JSON等文本格式。不要这样做。
原因是它使用0x00
之类的东西来表示诸如私有和受保护属性之类的某些事物。
我猜测DOM看到一个非ASCII字符并“放弃”。输出字符串时看不到它,因为这些字节通常不会显示在浏览器或终端中。
使用PHP的serialize()
格式还是个坏主意……但是,由于看起来好像您将其用作文件系统上的某种缓存机制,为什么要将它嵌入XML?只需单独存储序列化的字符串即可。更快,因为您不需要XML解析器。