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

Php 由于解码不正确,Wordpress搜索特殊字符失败,php,string,wordpress,special-characters,decode,Php,String,Wordpress,Special Characters,Decode,我正在实现Wordpress搜索功能。 当我搜索文本“部门的”(这是一篇文章中的文本), 它返回“未找到结果” 现在为了进一步调查,我检查了核心文件: wp includes/query.php=>函数parse_search() 并发现$term的接收编码为:Division\xe2\x80\x99s 现在这个术语没有被正确地解码。最后形成的SQL语句是: ((test_posts.post_title,如'%Division\xe2\x80\x99s%')或(test_posts.post_

我正在实现Wordpress搜索功能。 当我搜索文本“部门的”(这是一篇文章中的文本), 它返回“未找到结果”

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

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

现在这个术语没有被正确地解码。最后形成的SQL语句是:
((test_posts.post_title,如'%Division\xe2\x80\x99s%')或(test_posts.post_内容,如'%Division\xe2\x80\x99s%'))

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

解码方法如下:

  • $string=urldecode($string)
  • $string=html\u entity\u decode($string)
  • $string=rawurldecode($string)
  • $string=base64_解码($string)
  • $string=utf8\u解码($string)
不起作用。 是否有任何插件/钩子/方法可以提供帮助

提供的示例:

Simple
searchform.php
文件如下:

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>
仍然存在一个问题,但不再是文本输入没有正确字符串的问题,问题是现在没有搜索结果

如何使用Wordpress搜索解决此问题

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

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
<!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>
header.php包含以下内容:

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
<!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>


好的,所以你必须解码搜索查询,下面是我如何让它工作,就像一个魅力现在!这将返回搜索结果,但会对url进行编码,因此不会出现任何问题

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中添加以下内容:

RewriteCond %{QUERY_STRING} s=(.*)
RewriteRule ^$ /search/%1? [R,L]
搜索的结构如下:
/search/searchterm


现在,带有特殊字符的查询也可以工作了。对于CMS的一部分来说,这是一件多么令人头疼的事情啊。

这与编码无关,与字符集有关,我无意中发现了这一点,而且我没有面对一个干净的wordpress安装。您应该添加到问题中的一些详细信息包括:您使用的是自定义帖子类型,还是据您所知,这是默认的帖子类型。据我所知,wordpress只搜索文章标题、标签和类别,而不搜索文章正文(我可能在这一点上错了,但我觉得我在搜索结果方面也遇到了类似的问题,并通过一个核心文件解决了这个问题)。正如@Lashane指出的,如果这是一个定制的东西,UTF-8可能就是答案。你能提供数据库中出现的术语吗?这样我们就可以将它与我们正在搜索的文件进行比较,看看它们是否相同。wp-config.php有以下内容:
define('DB_CHARSET','utf8');定义('DB_COLLATE','')所以,我在这里使用ut8作为字符集。