Напишите переменное содержание в xml - PullRequest
0 голосов
/ 05 сентября 2018

Вот моя проблема: я хочу поместить мою переменную (сериализованную базу данных 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 голосов
/ 05 сентября 2018

Я на 80% уверен, что это ваша проблема:

PHP serialize() не возвращает строки ASCII или UTF-8. Это двоичный формат, и вы не можете встроить его в текстовые форматы, такие как XML или JSON. Не делай этого.

Причина в том, что он использует такие вещи, как 0x00, для обозначения определенных вещей, таких как частные и защищенные свойства.

Я предполагаю, что DOM видит не-ascii символ и "сдается". Вы не видите этого при выводе строки, потому что эти байты обычно не отображаются в браузерах или терминалах.

Использование PHP serialize() формата в любом случае является плохой идеей ... но, похоже, вы используете его в качестве механизма кэширования в файловой системе, зачем вам встраивать его в XML? Просто сохраните сериализованную строку отдельно. Это быстрее, потому что вам не нужен анализатор XML.

...