首页 > 解决方案 > 使用 RequestHandler->renderAs XML 将 `htmlspecialchars()` 应用于 CDATA

问题描述

我需要将一些描述包装到<![CDATA[...]]>.

我在做什么:

public function cdata() {
    $description = 'Den snabba bruna räven hoppade över den lata hunden';
    $channel = array();
    $channel['item'] = array(
        'g:description' => '<![CDATA['.$description.']]>',
    );
    $this->RequestHandler->renderAs($this, 'xml');
    $this->set('_rootNode', 'rss');
    $this->set('xmlns:g', 'http://base.google.com/ns/1.0');
    $this->set([
        'channel' => $channel,
    ]);
    $this->set('_serialize', ['xmlns:g','channel']);
}

我得到了什么:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <item>
      <g:description>&lt;![CDATA[Den snabba bruna räven hoppade över den lata hunden]]&gt;</g:description>
    </item>
  </channel>
</rss>

我想要的是:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <item>
      <g:description><![CDATA[Den snabba bruna räven hoppade över den lata hunden]]></g:description>
    </item>
  </channel>
</rss>

问题:

CDATA 获取 htmlspecialchars'd,<>转换为&lt;and &gt;。这是我需要的示例),请参阅第二个示例演示 CDATA部分的使用。

cakephp 3我用谷歌搜索了,xml和的各种组合cdata,但什么也没找到,特别是检查了文档和这里。请帮忙!

标签: xmlcakephpcakephp-3.0cdata

解决方案


它(尚未)受支持,XML 视图在内部Xml::fromArray()用于序列化,它使用DOMText节点来表示所有非数字内容。

现在,如果您需要CDATA部分,您将不得不放弃使用序列化,并自己构建 XML(在视图模板中)。


推荐阅读