如何正确转义已过滤的内容变量?

时间:2019-05-02 13:39:54

标签: iframe filter escaping embed

我正在为我的Wordpress主题运行主题检查器插件,并且有以下代码片段:

1。获取并仅显示帖子内容中的第一个嵌入式视频:

<?php  $content = apply_filters( 'the_content', $post->post_content );

$embeds = get_media_embedded_in_content( $content );
$first_embedded = $embeds[0];
echo $first_embedded;
  ?>

2。从帖子内容中删除所有嵌入的内容:

   <?php 
     $content = apply_filters( 'the_content', $post->post_content );
     $content = preg_replace("/(<iframe[^<]+<\/iframe>)/", '', $content);
     echo $content;
     ?>

我在主题检查器中收到此警告:

WARNING: Found echo $ in the file single.php. Possible data validation issues found. All dynamic data must be correctly escaped for the context where it is rendered.
Line 34: echo $first_embedded;
Line 76: echo $content;

如何正确地转义那些变量? 我尝试过:

<?php esc_html( $first_embedded); ?>

但是它只是打印嵌入式视频的HTML <iframe>...</iframe>代码,就像它是一个简单的文本字符串一样。

如果我在$content上做同样的事情:

 <?php esc_html( $content); ?>

我是初学者。问题是我需要这两个变量,因为如果发布格式是Video类型,则第一个显示视频,并用第一个嵌入式视频替换发布缩略图。

还需要第二个功能,以便不在帖子内容中显示该视频。

1 个答案:

答案 0 :(得分:3)

我找到了一个很好的解决方法,可以在Theme Checker以及WordPress页面上顺利进行,这可以通过使用 html_entity_decode()

所以我替换了:

echo $first_embedded;

此行:

echo html_entity_decode( esc_html( $first_embedded ) );

并且:

echo $content;

使用:

echo html_entity_decode( esc_html($content) );

html_entity_decode()函数将HTML实体转换为字符,这是我们需要显示过滤后的帖子内容的代码,并且在Envato或WP Theme Checker中不会出现任何错误。

希望这可以帮助遇到同样问题的其他人。