Esc_url()和esc_url_raw()之间的区别

时间:2011-03-31 作者:onetrickpony

http://core.trac.wordpress.org/browser/trunk/wp-includes/formatting.php#L2239

我不知道什么时候应该使用它们中的任何一个。

假设我有此URL:http://site.com/?getsomejavascript=1, 它是动态生成的javascript:

如果我将脚本包含在esc_url(add_query_arg(\'apples\', 420)), 我明白了http://site.com/?getsomejavascript=1&apples=420 因为这些#038; 参考文献

如果我使用esc_url_raw(add_query_arg(\'apples\', 420)) 我获得了正确的URL:http://site.com/?getsomejavascript=1&apples=420

但在文档中,我发现esc\\u url\\u raw只应用于转义插入数据库中的url。。。

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

Codex entry for Data Validation: URLs:

esc_url( $url, (array) $protocols = null ) (自2.8起)

清理url(在文本节点、属性节点或其他任何位置)时,始终使用esc\\u url。拒绝没有提供的白名单协议之一的URL(默认为http、https、ftp、ftps、mailto、news、irc、gopher、nntp、feed和telnet),消除无效字符,并删除危险字符。自3.0以来已弃用:clean\\u url()此函数将字符编码为HTML实体:在生成(X)HTML或XML文档时使用此函数。对符号进行编码(&;)和单引号(\')作为数字实体引用(&,')。

esc_url_raw( $url, (array) $protocols = null ) (自2.8起)

用于在数据库中插入URL。此函数不将字符编码为HTML实体:在存储URL或其他需要非编码URL的情况下使用此函数。通过将$context设置为db,可以在旧的clean\\u url函数中复制此功能。

因此,主要区别似乎是:

  1. esc_url() 对HTML实体进行编码,而esc_url_raw() 没有esc_url() 用于输出,而esc_url_raw() 用于数据库存储编辑:

    因为您要硬编码(或单独保存/存储)查询字符串中的实际URL,然后通过[add_query_arg()][2], 通过esc_js(), 而不是esc_url()?

    例如:

    add_query_arg( esc_js( \'apples\' ), esc_js( \'420\' ), $myurl )
    

结束

相关推荐

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