php - 在xml中写一个变量内容
问题描述
这是我的问题:我想将我的变量(一个 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";}}
解决方案
我大约 80% 确定这是你的问题:
PHPserialize()
不返回 ASCII 或 UTF-8 字符串。它是一种二进制格式,您不能将其嵌入到 XML 或 JSON 等文本格式中。不要这样做。
原因是它使用0x00
诸如私有和受保护属性之类的东西来表示某些东西。
我猜 DOM 看到一个非 ascii 字符并“放弃”。输出字符串时看不到它,因为这些字节通常不会显示在浏览器或终端中。
无论如何,使用 PHP 的serialize()
格式是个坏主意……但既然您似乎将它用作文件系统上的某种缓存机制,那么为什么要将其嵌入 XML 中呢?只需自己存储序列化的字符串。它更快,因为您不需要 XML 解析器。