首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >由于解码不正确,Wordpress搜索在特殊字符上失败

由于解码不正确,Wordpress搜索在特殊字符上失败
EN

Stack Overflow用户
提问于 2016-08-11 14:39:57
回答 1查看 4.9K关注 0票数 23

我正在实现Wordpress搜索功能。当我搜索文本“部门的”(这是其中一个帖子中的文本)时,它返回"No results found“。

现在为了进一步研究,我检查了核心文件:query.php wp-/query.php =>函数parse_search()

并发现接收到的编码为:Division\xe2\x80\x99s的$term

现在这个术语没有被正确解码。最终形成的SQL语句为:

(test_posts.post_title LIKE‘%分区\xe2\x80\x99s%’) OR (test_posts.post_content LIKE‘%分区\xE2\x80\x99s%’)

因此,我想解码特殊字符,以成功地搜索具有特殊字符的术语。

解码方法如下:

原始解码urldecode($string);

  • $string = html_entity_decode($string);

  • $string =
  • $string = rawurldecode =rawurldecode=rawurldecode=rawurldecode=rawurldecode=rawurldecode=rawurldecode

没有起作用。有没有什么插件/钩子/方法可以帮助你?

提供的示例:

这里有一个简单的searchform.php文件:

代码语言:javascript
复制
if (!defined('ABSPATH')) exit(0); 

global $wp_query;

$search_query = get_search_query();
$error = get_query_var('error'); ?>

<form role="search" method="get" class="search-form form-inline" action="<?php echo esc_url(home_url('/')); ?>">
    <input id="mod-search-searchword" type="search" size="30" class="inputbox search-query search-field" placeholder="search products, content" value="<?php echo !empty($search_query) && empty($error) ? $search_query : ''; ?>" name="s" title="Search for:" />
    <input type="submit" class="button btn btn-primary" value="Search" />
</form>

现在,如果我输入像()这样的字符,它们将被etc编码,并且相同的etc编码字符串不会使用百分比等填充到文本字段中。

如果我这样做:

代码语言:javascript
复制
$search_query = !empty($search_query) ? trim(sanitize_text_field(urldecode($search_query))) : '';

仍然存在一个问题,但不再是文本输入没有正确字符串的问题,问题变成了现在没有搜索结果。

如何用Wordpress搜索解决这个问题?

wp-config.php包含以下内容:

代码语言:javascript
复制
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

header.php包含以下内容:

代码语言:javascript
复制
<!DOCTYPE html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=yes"/>
        <meta name="HandheldFriendly" content="true" />
        <meta name="apple-mobile-web-app-capable" content="YES" />
        <link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/favicon.ico" type="image/vnd.microsoft.icon" />
        <title><?php wp_title(' - ', true, 'right'); ?></title>
        <?php wp_head(); ?>
    </head>

我的functions.php文件中包含以下内容:

代码语言:javascript
复制
function livchem_searchfilter($query) {

    global $search_query;

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

        // check if length of query > 3 but < 200
        $search_query = trim(get_search_query());
        $search_length = strlen($search_query);

        if ($search_length < 3 || $search_length > 200)
        {
            $query->set('error', 'Search term must be a minimum of 3 characters and a maximum of 200 characters.');
            return $query;
        }
        else
        {
            $query->set('post_type', array('post', 'page', 'product'));
            $query->set('posts_per_page', 20);
        }
    }

    return $query;
}

add_filter('pre_get_posts','livchem_searchfilter');

因此,我使用UTF-8编码作为我的字符集afaik。这是什么问题,为什么我在copper(i)/(ii)中搜索: URL返回?s=copper%2528i%2529%252F%2528ii%2529?我应该找到2个结果,但是我得到0个结果。为什么?

如果我把url改为:?s=copper(i)/(ii),我会看到我的2个结果。但是为什么我不能得到我的结果,和/或url是这样的呢?老实说,我不太关心url结构是什么,但我确实希望当我在搜索表单中键入:copper(i)/(ii)时能找到我的2个结果,但目前它找不到任何结果。

EN

回答 1

Stack Overflow用户

发布于 2017-02-23 09:49:36

好的,所以你必须解码搜索查询,这就是我是如何让它工作的,现在它的工作方式就像一个咒语!这会返回搜索结果,但会将url编码,这样就不会出现问题。

代码语言:javascript
复制
function livchem_search_filter($s) {
    return urldecode($s);
}

add_filter('get_search_query', 'livchem_search_filter');
add_filter('the_search_query', 'livchem_search_filter');

function livchem_query_vars_search_filter($query)
{
    if ($query->is_search && !is_admin()) {
        $query->query_vars['s'] = urldecode($query->query_vars['s']);
    }

    return $query;
}
add_action('parse_query', 'livchem_query_vars_search_filter');

另外,这也适用于与路径相关的搜索,所以如果我在我的.htaccess中添加以下内容:

代码语言:javascript
复制
RewriteCond %{QUERY_STRING} s=(.*)
RewriteRule ^$ /search/%1? [R,L]

搜索的结构是这样的:/search/searchterm

使用特殊字符的查询现在也可以使用。对于CMS的一部分,为了正常工作,这是多么痛苦的事情。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38889007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档