首页 > 解决方案 > 在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";}} 

标签: phpxmldomdocument

解决方案


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

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

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

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

无论如何,使用 PHP 的serialize()格式是个坏主意……但既然您似乎将它用作文件系统上的某种缓存机制,那么为什么要将其嵌入 XML 中呢?只需自己存储序列化的字符串。它更快,因为您不需要 XML 解析器。


推荐阅读