Wordpress検索機能を実装しています。私はテキストを検索すると は「部門の」それは今 不適切なデコードのためにWordpress検索が特殊文字で失敗しました
をさらに調査するために、「結果が見つかりません」を返し、 (ポストの1のテキストがあるが)、私はコアファイルをチェックする: wp-/query.php =>関数parse_search()が含まれており、$用語はとしてエンコード受信されたことがわかった:課\ XE2 \ X80 \ x99s
今、この用語が正しく復号されません。最終的なSQL文は、
(((test_posts.post_title LIKE '%Division \ xe2 \ x80 \ x99s%')または(test_posts.post_content LIKE '%Division \ xe2 \ x80 \ x99s%')))
したがって、特殊文字を含む用語を正しく検索するには、特殊文字をデコードする必要があります。以下のような
復号方法:
- $文字列= urldecode($文字列);
- $ string = html_entity_decode($ string);
- $ string = rawurldecode($ string);
- $ string = base64_decode($ string);
- $ string = utf8_decode($ string);
動作しませんでした。 プラグイン/フック/メソッドがありますか?
提供例:ここ
シンプル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>
は今、彼らはURLエンコードを取得し、その同じURLエンコード文字列がテキストフィールドに移入されていません百分率などで表します。
この場合、
$search_query = !empty($search_query) ? trim(sanitize_text_field(urldecode($search_query))) : '';
文字列が正しくない文字列に問題はなくなりましたが、現在は検索結果が存在しないという問題があります。
Wordpress Searchでこの問題を解決するにはどうすればよいですか?
のwp-config.phpのには、次のものが含まれています。私は私の機能で、以下の持っている
<!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>
:
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
header.phpのは、以下が含まれています。phpファイル:
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');
私は、文字セットafaikとしてUTF-8エンコーディングを使用しています。何が問題なのですか?私の検索はなぜですか: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つの結果が見つかるようにしたいのですが、現在は結果が見つかりません。
それはエンコードについてではなく、その約charsets、使用[utf8](http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) –
私はこれに遭遇していないクリーンなWordPressのインストールの前に。あなたの質問に追加する必要があるいくつかの詳細は、カスタムの投稿タイプを使用しているのか、これがデフォルトの投稿タイプなのか、あなたの知識の中で最高です。私の知る限り、wordpressは投稿のタイトル、タグ、カテゴリのみを検索し、ポストボディは検索しません(私は間違っているかもしれませんが、検索結果と同様の問題があって、 。 @Lashaneが指摘したように、これがカスタムなものなら、UTF-8はおそらく答えでしょう。 – Shawn
データベースに表示されている用語を入力してください。そうすれば、私たちが探しているものと比較して、同じであるかどうかを見ることができます。 –