转义内置WP函数返回字符串

时间:2016-01-27 作者:dotancohen

是否应该过滤内置WP函数的输出,例如get_permalink() 以及著名的WP插件,如ACF(高级自定义字段),如get_field()?

比如说get_permalink() 呼叫home_url() 哪个呼叫get_home_url(), none of which do any filtering of the data. 以类似的方式工作the_content(), the_title() 以及其他熟悉的循环相关函数。

因此,以下内容是否足够?(esc_attr() 用于WP和ACF功能

<?php while ($wp_query->have_posts() && __return_true($wp_query->the_post()) ) : ?>
    <a href="<?=get_the_permalink()?>">
        <img src="<?=get_field(\'homepage_thumbnail\')[\'sizes\'][\'thumbnail\']?>" />
    </a>
<?php endwhile; ?>
或者我应该对来自插件的数据更加小心吗?(注意esc_attr() 添加到ACF图像源,第三行

<?php while ($wp_query->have_posts() && __return_true($wp_query->the_post()) ) : ?>
    <a href="<?=get_the_permalink()?>">
        <img src="<?=esc_attr(get_field(\'homepage_thumbnail\')[\'sizes\'][\'thumbnail\']?>)" />
    </a>
<?php endwhile; ?>
或者,即使使用股票WP功能,我也应该格外小心吗?(注意esc_attr() 添加到WP anchor href,第二行

<?php while ($wp_query->have_posts() && __return_true($wp_query->the_post()) ) : ?>
    <a href="<?=esc_attr(get_the_permalink())?>">
        <img src="<?=esc_attr(get_field(\'homepage_thumbnail\')[\'sizes\'][\'thumbnail\']?>)" />
    </a>
<?php endwhile; ?>

2 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

转义用于生成有效的HTML或其他格式,它取决于上下文。

以类似的方式转义url<a href="<?php echo $url?>".... 需要替换任何“&;”&带的字符;(尽管如果你不这样做,浏览器很可能会帮你修复)。

在输入元素中转义url,如<input value="<?php echo $url?>"...不需要更换“&;”但确实需要替换任何引号字符。

所以一般来说,由于转义是上下文敏感的,所以您可以假设wordpress API不会为您转义它。插件的作用取决于插件本身。

SO网友:RRikesh

无论数据的来源是什么,您都应该始终避开它。对于您的示例,应该使用esc_url().

WordPress有许多可以使用的功能。有一篇关于Data validation 在Codex上列出了各种可用功能。

相关推荐

Escaping SVG with KSES

我试图在模板中输出SVG文件,PHPCS告诉我需要转义输出。所以我尝试使用KSES,但它似乎不想包含viewbox属性。 $allowed_html = array( \'svg\' => array( \'xmlns\' => array (), \'viewBox\' => true ), \'path\' => array( \'d\'=> array(), ), )