在URL上多次使用esc_url()

时间:2016-11-22 作者:Andy

如果我有一个前端post表单,用户在其中输入url,是否可以并建议使用esc_url() 两次-一次用于使用前清洁输入update_post_meta 用于数据库存储,并再次用于输出。

// escape url before using update_post_meta
update_post_meta( $post_id, \'url\', esc_url( $url ) );

// escape url on output
echo esc_url( get_post_meta( $post_id, \'url\', true ) );
感谢您的帮助。

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

可以多次使用,但不鼓励。然而,在第一个示例中,您正在将URL保存到数据库中。当您这样做时,或者在wp_remote_* 上下文、重定向或任何其他非显示上下文,您应该使用esc_url_raw() 相反

还要注意的是get_post_meta 将返回数组,除非第三个参数$single 设置为true。如果要处理单个键值对,则需要:

echo esc_url( get_post_meta( $post_id, \'url\', true ) );
希望有帮助!

SO网友:socki03

根据Wordpress codex,使用esc_url_raw

esc\\u url\\u raw()函数类似于esc\\u url()(并实际使用它),但与esc\\u url()不同,它不替换要显示的实体。生成的URL可以安全地用于数据库查询、重定向和HTTP请求。

所以,可能应该这样写:

// escape url before using update_post_meta
update_post_meta( $post_id, \'url\', esc_url_raw( $url ) );

// escape url on output
echo esc_url( get_post_meta( $post_id, \'url\', true ) );
综上所述,esc_url_raw 用于数据库存储,以及esc_url 用于显示。

SO网友:birgire

我只想提一下validating 存储之前的用户输入,然后escape 当你显示它的时候。

例如filter_var() PHP函数FILTER_VALIDATE_URL 旗帜

还有wp_http_validate_url() 函数,应用于wp_safe_remote_{post,request,get} 调用,以避免重定向和请求伪造攻击,如内联文档中所述。

相关推荐

Disable escaping html

我在用SyntaxHighlighter Evolved 突出显示代码示例。E、 g。[csharp] string s = \"text\"; List<int> numbers = new List<int>(); [/csharp] 当我第一次保存它时,没关系,但编辑wordpress时,文本会更改为[csharp] string s = &quot;text&quot;; List&lt;int&am