防止ADD_SHORTLE代码转义标记

时间:2012-10-12 作者:BryanH

在我的插件中,我使用一些内联JavaScript呈现一个短代码。Wordpress似乎讨厌结束CDATA标记(]]>), 当它逃避它时。我使用CDATA块来呈现格式良好的XHTML,这允许其他进程轻松地抓取页面内容(传统系统很糟糕,超出了这个问题的范围)。

是否有办法按预期输出结束的CDATA标记?

复制步骤下面是我的代码片段,删除了不重要的部分:

add_shortcode( \'foo\', array( $this, \'foo_code\' ) );

function foo_code( $a ) { 
  return "
  <script>
  //]]>
  </script>";
}

预期输出

<script>
//]]>
</script>";
实际输出量
<script>
//]]&gt;
</script>  
其他信息我发现<script> 标签正在触发转义。如果我将代码更改为

return "
//]]>
</script>";
It输出

//]]>
出于某种原因,它不会输出结束脚本标记(!)

JavaScript块中还有什么并不重要:]]> 标记总是转义的。

我试过了html_entity_decode() 在返回之前在字符串上,但这没有任何作用。

我在谷歌上搜索了Wordpress。组织论坛和StackExchange以获取解决方案(或任何类似问题),但尚未找到任何远程适用的解决方案。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

查看the_content():

function the_content($more_link_text = null, $stripteaser = false) {
    $content = get_the_content($more_link_text, $stripteaser);
    $content = apply_filters(\'the_content\', $content);
    $content = str_replace(\']]>\', \']]&gt;\', $content);
    echo $content;
}
正如您所看到的,没有任何过滤器可以阻止这种情况。如果您真的需要在XML文档中使用内联JavaScript,则必须避开危险的字符,如< 或避免the_content().

毁了你和六岁孩子的一天Ticket #3670 Removing CDATA close tag ( ]]> ) unbalances the CDATA block. :)

结束

相关推荐

PHP Widget and do_shortcode

我正在使用PHP小部件,它允许PHP代码从小部件执行。我尝试使用此代码执行do\\u shortcode,但它没有呈现<?php $lat = get_field(\'woo_maps_lat\'); $long = get_field(\'woo_maps_long\'); echo do_shortcode(\'[forecast location=\"\' . $lat .\',\'.$long. \'\" measurement=\\\'C\\\']\');