两者之间的选择esc_url
和esc_url_raw
取决于你对url的使用。
如果必须使用urldisplay 内部html使用esc_url
, E、 g.:
$my_link = get_post_meta( $post->ID, \'mod_modbox_link\', true );
echo \'<a href="\' . esc_url($my_link) . \'">Open link</a>\'
esc_url_raw
应用于任何其他用途,其中url应视为有效url,例如重定向:
$my_link = get_post_meta( $post->ID, \'mod_modbox_link\', true );
wp_redirect( esc_url_raw($my_link) );
或
HTTP API 功能:
$my_link = get_post_meta( $post->ID, \'mod_modbox_link\', true );
$response = wp_remote_get( esc_url_raw($my_link) );
这是因为
esc_url
转换其编码版本中的特殊htmlentities,
esc_url_raw
不会。例如,如果您的url类似
http://example.com/index.php?foo=bar&bar=baz
当您使用
esc_url
这个
&
转换为
&
当您使用
esc_url_raw
.
Codex表示使用esc_url_raw
还可以将url保存在db中,在您的情况下,post meta保存在数据库中,因此您应该使用esc_url_raw
设置元时:
$link = isset($_POST[\'meta\']) ? esc_url_raw($_POST[\'meta\']) : \'\';
update_post_meta( $post_id, \'mod_modbox_link\', $link );
然后在检索时,使用
esc_url_raw
或
esc_url
根据您的需要:如果您必须在html中打印,请使用
esc_url
否则使用
esc_url_raw
.