Домен PHP> createTextNode избегает некоторых символов - PullRequest
1 голос
/ 01 сентября 2009

Я использую dom-> createTextNode () в PHP. Я вижу, что он автоматически экранирует символы, например, "/" "и т. Д. Согласно руководству по PHP, это стандартное поведение.

Возможно ли, что это не ускользнет от каких-либо персонажей?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 сентября 2009

Если некоторые символы не экранированы, вы, возможно, не получите правильный XML-файл, в конце концов.

Если вы не хотите, чтобы какой-либо символ был экранирован, возможно, используйте DOMDocument::createCDATASection, чтобы получить разделы CDATA в вашем XML-файле.

Тем не менее, обратите внимание, что вы получите такие вещи (ну, разделы CDATA) в вашем XML:

<tag><![CDATA[<greeting>Hello, world!</greeting>]]></tag>
2 голосов
/ 11 января 2010

Если вы можете избежать escape-последовательностей, создав узел DomDocumentFragment и добавив необработанный текст с помощью метода appendXML ():

    $rawXMLNode = $domDoc->createDocumentFragment();
    $rawXMLNode->appendXML("<tag>text</tag><tag2>text2</tag2>");
    $someNode->appendChild($rawXMLNode);

Однако я не думаю, что вы обязательно можете получить доступ к DOM этого необработанного текста без перезагрузки документа. Также некоторые символы по-прежнему не допускаются. Мне нужно было выполнить некоторую обработку строк, чтобы вставить несколько php в html-документ, используя этот метод:

    $elem = $domHtml->getElementById('header');
    $newElem = $domHtml->createDocumentFragment();
    $newElem->appendXML('<div id="header"><?php include("templates/header.html"); QQQ?></div>');
    $elem->parentNode->replaceChild($newElem, $elem);
    $filedata = $domHtml->saveHTML();
    $filedata = str_replace('QQQ', '?', $filedata);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...