Хотя smarty может быть хорошей ставкой (зачем изобретать колесо в 14-й раз?), У etranger может быть смысл.Существуют ситуации, в которых вы не хотите использовать что-то излишнее, например, совершенно новый (и не изученный) пакет, но больше похоже на то, что вы хотите опубликовать некоторые данные из базы данных, которая, как оказалось, содержит html-материал, с которым у парсера XML есть проблемы.
Внимание, ниже приведено простое решение, но не делайте этого, если вы НЕ УВЕРЕНЫ, что вам это сойдет с рук!(Я сделал это, когда у меня было около 2 часов до крайнего срока, и у меня не было времени на учебу, оставил один только реализовать что-то вроде smarty ...)
Прежде чем вставлять строку в функцию appendXML, выполните ее черезpreg_replace.Например, замените все & nbsp;символы с [some_prefix] _nbsp.Затем, на странице, где вы показываете HTML, сделайте это наоборот.
И Престо!=)
Пример кода: Код, который помещает текст во фрагмент документа:
// add text tag to p tag.
// print("CCMSSelTextBody::getDOMObject: strText: ".$this->m_strText."<br>\n");
$this->m_strText = preg_replace("/ /", "__nbsp__", $this->m_strText);
$domTextFragment = $domDoc->createDocumentFragment();
$domTextFragment->appendXML(utf8_encode($this->m_strText));
$p->appendChild($domTextFragment);
// $p->appendChild(new DOMText(utf8_encode($this->m_strText)));
Код, который проанализировал строку и записал html:
// Instantiate template.
$pTemplate = new CTemplate($env, $pageID, $pUser, $strState);
// Parse tag-sets.
$pTemplate->parseTXTTags();
$pTemplate->parseCMSTags();
// present the html code.
$html = $pTemplate->getPageHTML();
$html = preg_replace("/__nbsp__/", " ", $html);
print($html);
Это, вероятно,хорошая идея придумать более сильную замену.(Если вы настаиваете на тщательности: выполните md5 для значения time () и жестко закодируйте результат этого в качестве префикса. Как в первом фрагменте:
$this->m_strText = preg_replace("/ /", "4597ee308cd90d78aa4655e76bf46ee0_nbsp", $this->m_strText);
И во втором:
$html = preg_replace("/4597ee308cd90d78aa4655e76bf46ee0_nbsp/", " ", $html);
Сделайте то же самое с любыми другими тегами и вещами, которые вам нужно обойти.
Это взломанный, и не очень хороший код, несмотря ни на что, но это спасло мне жизнь ихотел бы поделиться ею с другими людьми, которые сталкиваются с этой конкретной проблемой, потратив на это минуты.
Используйте вышеперечисленное на свой страх и риск.