【问题标题】:Using RequestHandler->renderAs XML applies `htmlspecialchars()` to CDATA使用 RequestHandler->renderAs XML 将 `htmlspecialchars()` 应用于 CDATA
【发布时间】:2018-08-09 15:21:48
【问题描述】:

我需要将一些描述包装到<![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,&amp;lt;&amp;gt; 转换为 &amp;lt;&amp;gt;。这里是an example of what I need (source),参见第二个例子演示CDATA的使用部分。

我搜索了cakephp 3xmlcdata 的各种组合,但什么也没找到,特别是检查了文档和此处。请帮忙!

【问题讨论】:

    标签: xml cakephp cakephp-3.0 cdata


    【解决方案1】:

    (尚)不支持,XML 视图在内部使用Xml::fromArray() 进行序列化,它对所有非数字内容使用DOMText 节点。

    目前,如果您需要 CDATA 部分,则必须放弃使用序列化,并自己构建 XML(在视图模板中)。

    【讨论】:

    • 感谢您的澄清。我猜这个问题是由一些狂野的北欧 UTF-8 字符引起的,我试图用CDATA 来处理它们,有什么办法可以代替this 吗?
    • 好吧,您可以在控制器级别将其应用于需要的数据,或者您必须扩展 XmlView 并遍历所有可序列化的视图变量以将其应用于所有内容。如果这确实是问题,而且实际上是普遍问题,那么也许您应该将其报告为问题,以便可以将其集成到核心中。添加 CDATA 支持也应该比较简单。
    • @aexl 如果您有兴趣,这里有一个快速而肮脏的 CDATA 支持补丁:gist.github.com/ndm2/ba4fdd444eb9753e23e4bbff53eccf88
    • 非常感谢,我正在努力。设法找到了有问题的字符:遇见,它看起来像一个普通的破折号,但一旦粘贴到 Coda 2 中就会变成一个问号。如果需要,我不确定如何获得有关它的更多信息。
    • 我确认将this function 应用于输入字符串可以解决问题。我现在将创建一个问题。
    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多