Wordpress:这应该逃脱吗?

时间:2017-02-15 05:51:21

标签: php wordpress post get escaping

我最近制作了一小段代码,将一些Scribu的帖子扩展为帖子功能。

它的作用是防止在没有特定模板的网页上设置帖子关系。

if ( isset( $posttypes_info[ $p2p_binding['from'] ]['only_on'] ) ) {
    if ( ! $_GET['post'] ) return false;

    if ( isset( $posttypes_info[ $p2p_binding['from'] ]['only_on']['template'] ) ) {
        $template = get_post_meta( $_GET['post'], '_wp_page_template', $single = true);
        if ( $template != 'templates/' . $posttypes_info[$p2p_binding['from'] ]['only_on']['template'] . '.php' ) {
            return false;
        }
    }
}

因此,在编辑帖子时,会获得帖子ID($ _GET [' post'])并检查该帖子是否具有所需的模板。如果不是,则返回false并且不设置关系。

wordpress.dev/wp-admin/post.php 发表= 2 &安培;行动=编辑

现在我的一个朋友告诉我,我应该逃避$ _GET [' post']。我的第一个想法是,它没有使用从$ _GET [' post']中检索到的数据设置任何内容。它只会检查它是否已设置,如果是,它会尝试使用它来获取post meta。

所以我的问题是:我应该逃避$ _GET ['帖子']?如果是,为什么/为什么不

2 个答案:

答案 0 :(得分:0)

如果你只是想检查post get param是否存在,你可以使用。

if(isset($_GET['post']))

我不确定我完全理解问题。你的意思是“逃避 $ _GET [ '后']“

答案 1 :(得分:0)

你的朋友可能在谈论的是$_GET['post']的内容实际上可能有特殊字符,不能只包含在有效的URL中(如果你这样做,它可能会破坏)。要确保它有效,必须对其进行URL编码或“转义”。这可能就像空格(' ')一样简单,必须在网址中将其编码为+%20才能使其有效。

这是一个需要“转义”(编码)的特殊字符表:

http://webdesign.about.com/library/bl_url_encoding_table.htm

在PHP中,您可能只需要使用urlencode函数:

http://php.net/manual/en/function.urlencode.php

编辑:总结在上面的OP示例代码中讨论“转义”必要性的评论......

get_post_meta的WordPress文档说第一个参数应该是int(数字),因此它应该足以确保$_GET['post']真的是int。因此,在这种情况下,“逃避”(例如通过urlencode)似乎是不必要的。