两者之间的选择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.