web-dev-qa-db-ja.com

wp_queryがアポストロフィで検索されない

meta_queryで "Dalton's Law"というフレーズを含むデータをWP_Queryで検索しようとしています。これはAJAX検索です、そして、これが私がしていることです:

//in this case $_POST['query'] is the phrase "Dalton's Law"

$query = apply_filters( 'get_search_query', $_POST['query'] );
$query = esc_html( $query );

$guide_meta_args   = array(
    'post_type'           => array( 'guide' ),
    'post_status'         => 'publish',
    'ignore_sticky_posts' => true,
    'posts_per_page'      => 4,
    'meta_query' => array(
        array(
            'key'     => 'guide_raw_data',
            'value'   => $query,
            'compare' => 'LIKE',
        ),
    )

);

"Dalton"まで入力しても成功しますが、アポストロフィに達するとすぐに検索が失敗します。私のJavascriptからコードを取り戻すとき、私は検索文字列をconsole.logでき、それはdalton\'sです。エンコーディングは正しく機能しているようですが、WP_Queryはアポストロフィが好きではありません...誰かが提案をしますか?本当にありがとう!

1
go_cuc

esc_htmlの代わりに sanitize_text_field を使ってみてください。

wp> $search_query = "Dalton's Law <br/>";
string(18) "Dalton's Law <br/>"
wp> $query = apply_filters( 'get_search_query', $search_query );
string(18) "Dalton's Law <br/>"
wp> $esc_html = esc_html( $query );
string(29) "Dalton&#039;s Law &lt;br/&gt;"
wp> $sanitized = sanitize_text_field( $query );
string(12) "Dalton's Law"

esc_htmlは、 から HTMLに進む前に出力をエスケープするために使用されるべきです。

2
phatskat