我对元框中的URL清理感到困惑

时间:2014-01-08 作者:arduin

我正在为自定义帖子制作一个元框,这个元框将包含一个href值。我不需要任何验证,因为这是一个有效的href值,但我希望以安全的方式进行验证。

我已经用this tutorial.

在清理我使用的输入的部分esc_url_raw() 看起来效果不错,但抄本上说esc_url_raw():

此函数用于显示URL不安全,请使用esc_url() 相反

所以我应该使用esc_url() 还是有什么else 我应该使用的,如果是,为什么我不应该使用esc_url_raw() 在这种情况下?

我的代码:

/* Get the posted data and sanitize it */
$new_meta_value = ( isset( $_POST[\'mod-modbox-link\'] ) ? esc_url_raw( $_POST[\'mod-modbox-link\'] ) : \'\' );
我使用以下内容获取页面的URL:

$my_link = get_post_meta( $post->ID, \'mod_modbox_link\', true );

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

两者之间的选择esc_urlesc_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 这个& 转换为&#038 当您使用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_rawesc_url 根据您的需要:如果您必须在html中打印,请使用esc_url 否则使用esc_url_raw.

结束

相关推荐

从自定义帖子类型获取所有帖子,并将其作为metabox插入到选择输入中

我想知道这样做是否可行。我有Slider 自定义帖子类型和Services 自定义帖子类型。对于滑块帖子,我已经为URL值创建了一个元框,以显示在所有滑块帖子旁边。我现在想做的是从Services custom post type, 并将它们显示在这个滑块post metabox中作为选择输入,这样我就可以选择链接应该指向哪个帖子。提前感谢:)以下是当前代码:function rm_display_slider_metabox($post) { wp_nonce_field(ba