Google中的SitelLinks搜索框和urlended搜索字符串

时间:2015-07-04 作者:cybmeta

我最近实现了Sitelinks Search Box 我在搜索词和特殊字符方面有问题。

例如,如果我在WP的标准搜索框中引入了一个带重音的字符,它就被正确使用了。如果我在sitelinks搜索框中也这样做,重音字符是URL enconded,WP直接使用它,并且不会正确返回restuls(大多数情况下结果为零)。

实例正在搜索camión 从google搜索框,它重定向到https://example.com/?s=cami%25C3%25B3n WordPress没有给出任何结果。如果我直接在WP中搜索同一个单词,我会得到正确的结果。

如果我对搜索字符串进行URL解码,似乎一切都正常。但它是安全的?我认为这是因为数据库查询稍后会转义,但不确定。

add_action( \'pre_get_posts\', function( $query ) {

    if( $query->is_search() && ! is_admin() && $query->is_main_query() ) {

        $query->set( \'s\', urldecode( get_search_query() ) );

    }

} );

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

我可以确认url解码搜索查询是正确的方法。事实上,它是在WordPress core中为WP\\U查询的搜索参数执行的,但当搜索字符串来自$_GET 请求,如中所示WP_Query::parse_search() 方法,wp包括/查询。php#L2061(WP 4.2.2):

if ( empty( $_GET[\'s\'] ) && $this->is_main_query() )
    $q[\'s\'] = urldecode( $q[\'s\'] );
稍后在同一方法中,搜索短语被替换。因此,Google SearchBox中的搜索字符串必须经过URL解码,并且是安全的:

add_action( \'pre_get_posts\', function( $query ) {

    if( ! is_admin() && $query->is_search() && $query->is_main_query() ) {

        $query->set( \'s\', urldecode( $query->get( \'s\' ) ) );

    }

} );

结束

相关推荐

Where is search.php?

我在Wordpress 4.0.1上有一个网站,但我找不到搜索。php。数据库批处理过程已将模板应用于默认搜索结果页面,但我现在找不到该页面以将其更改回原来的页面。如何更改此页面的模板?在我的主题中创建一个新的“search.php”会有帮助吗?如果是,此文件应包含哪些内容?