2016-08-11 6 views
18

Ich implementiere die Wordpress-Suchfunktion. Wenn ich für Text „Division“ zu suchen (das ist ein Text in einem der Pfosten ist), Es gibtWordpress-Suche bei Sonderzeichen wegen fehlerhafter Dekodierung fehlgeschlagen

Now „Keine Ergebnisse gefunden“ weiter zu untersuchen, ich die Core-Datei überprüft: WP- includes/query.php => Funktion parse_search()

gefunden und dass der $ Begriff als codiertes empfangen wird: Abteilung \ XE2 \ x80 \ x99s

Nun wird dieser Begriff nicht richtig decodiert. Und die letzte SQL-Anweisung ist:
(((test_posts.post_title LIKE '% Division \ xe2 \ x80 \ x99s%') ODER (test_posts.post_content LIKE '% Division \ xe2 \ x80 \ x99s%')))

Also, ich möchte die Sonderzeichen zu erfolgreich suchen Begriffe mit Sonderzeichen auch zu dekodieren.

Decodierungsverfahren wie:

  • $ string = urldecode ($ string);
  • $ string = html_entity_decode ($ string);
  • $ string = rawurldecode ($ string);
  • $ string = base64_decode ($ string);
  • $ string = utf8_decode ($ string);

Hat nicht funktioniert. Gibt es ein Plugin/Hook/Methode, die helfen kann?

Beispiel bereitgestellt:

Einfache searchform.php Datei hier:

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> 

Nun, wenn ich in Zeichen wie () geben sie erhalten Urlencoded, und dass gleiche urlencoded Zeichenfolge auffüllt nicht in das Textfeld mit den Prozentsätzen usw.

Wenn ich dies tue:

Es gibt immer noch ein Problem, aber kein Problem mehr mit der Texteingabe, die nicht die richtige Zeichenfolge hat, das Problem wird, dass es jetzt keine Suchergebnisse gibt.

Wie behebt man dieses Problem mit Wordpress Search?

wp-config.php enthält folgende Komponenten:

define('DB_CHARSET', 'utf8'); 
define('DB_COLLATE', ''); 

header.php enthält folgende Komponenten:

<!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> 

ich folgendes in meine Funktionen haben.PHP-Datei:

So habe ich UTF-8-Codierung als meine Zeichensatz afaik. Was ist das Problem, warum ist meine Suche nach: copper(i)/(ii) Rückgabe ?s=copper%2528i%2529%252F%2528ii%2529 in der URL? Und ich sollte 2 Ergebnisse dafür finden, aber ich bekomme 0 Ergebnisse gefunden. Warum?

Und wenn ich die URL zu diesem ändern: ?s=copper(i)/(ii) sehe ich meine 2 Ergebnisse. Aber warum kann ich meine Ergebnisse und/oder die URL nicht so bekommen? Ich könnte ehrlich weniger interessieren, was die URL-Struktur ist, aber ich möchte, dass meine 2 Ergebnisse gefunden werden, wenn ich eintippe: copper(i)/(ii) in das Suchformular, aber derzeit findet es keine Ergebnisse.

+1

es geht nicht um Kodierung, es ist über Zeichensatz, verwenden [UTF8] (http://StackOverflow.com/Questions/279170/utf-8-all-the-Way-Through) –

+0

Ich stolperte darüber und bin es nicht vor einer sauberen WordPress-Installation. Zu den Details, die Sie zu Ihrer Frage hinzufügen sollten, gehören: Verwenden Sie einen benutzerdefinierten Beitragstyp oder war dies nach bestem Wissen ein Standardposttyp. Was mein Wissen betrifft, durchsucht Wordpress nur Titel, Tags und Kategorien und nicht den Post-Body (ich mag mich dabei irren, aber ich habe das Gefühl, dass ich ein ähnliches Problem mit den Suchergebnissen hatte und dies über eine der Kerndateien herausgefunden habe) . Als @Lashane wies darauf hin, UTF-8 ist wahrscheinlich die Antwort, wenn dies eine benutzerdefinierte Sache ist. – Shawn

+0

Können Sie bitte den Begriff so angeben, wie er in der Datenbank erscheint? Auf diese Weise können wir es mit dem vergleichen, nach dem wir suchen, und sehen, ob sie gleich sind. –

Antwort

9

Ok, also müssen Sie die Suchanfrage entschlüsseln und hier ist, wie ich es funktioniert und funktioniert wie ein Charme jetzt! Dies gibt nun die Suchergebnisse zurück, behält aber die URL verschlüsselt, so dass hier keine Probleme auftreten.

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'); 

Als Plus dies auch jetzt gut für Pfad verwandte Suchen funktioniert, also wenn ich folgendes meiner .htaccess hinzugefügt:

RewriteCond %{QUERY_STRING} s=(.*) 
RewriteRule ^$ /search/%1? [R,L] 

Suchbegriffe wie so strukturiert werden würde: /search/searchterm

Und die Abfrage mit Sonderzeichen funktioniert jetzt auch. Was für ein Schmerz im Nacken war es, richtig zu funktionieren, für etwas, das Teil des CMS ist.

Verwandte Themen