2 Stimmen

Jquery ui - Autocomplete - UTF8-Zeichensatz

Ich arbeite an diesem jQuery-Dateneingabeformular, bei dem ich ein bestimmtes Feld mit Daten aus MySQL automatisch ausfüllen lassen muss.

Ich habe alles funktioniert, Autovervollständigung ruft Daten aus MySQL über PHP ab Abgleich ist großartig bei englisch/lateinischen Zeichen.

Das Problem ist, wenn ich Griechisch eingebe, erhalte ich nur FALLSENSITIVE Übereinstimmungen Wenn ich den richtigen Fall eingebe, erhalte ich meine Übereinstimmung und alles läuft gut, aber ich möchte, dass es FALLunempfindlich ist.

Wie Sie verstehen, verwende ich es mit einer externen Quelle, also denke ich, dass es etwas sein muss, wenn die beiden Zeichenfolgen verglichen werden... funktioniert perfekt, wenn der Fall richtig eingegeben wird...

Außerdem, wie Sie in meinem Code sehen werden, habe ich ein Array [id, name] Mit meiner aktuellen Konfiguration (selbst fallabhängig) suche ich den Namen, das Dropdown-Menü erscheint, wenn ich auf den gewünschten Namen klicke, wird das Feld mit der ID gefüllt und wenn ich das Formular absende, wird die ID an die nächste PHP-Seite übermittelt.

Gibt es eine Möglichkeit, genau dasselbe zu haben, aber anstelle des Feldes mit der ID das Feld mit dem Namen zu füllen? Das heißt: Nach dem Namen suchen, Dropdown-Menü mit Namen erhalten, klicken und den Namen im Feld erhalten und beim Absenden die ID übermitteln?

Jede Hilfe wäre sehr geschätzt. Hier ist der Code:

blah blah...

 Nachname: 

Hier ist das JS:

$(function() {
    var cache = {},
        lastXhr;
    $( ".name" ).autocomplete({
        minLength: 1,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }

            lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
    });
});

Und hier ist die Quelle (search.php):

$key) {
        if (strpos(strtolower($key),$q ) !== false) {
                array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($value)));
        }
        if (count($result) > 11)
                break;}

echo json_encode($result);

?>

Sie sehen, dass ich mysql_set_charset('utf8',$link); mysql_query("SET NAMES 'utf8'", $link); in meiner Quell-PHP-Datei eingeschlossen habe + das Zeichensatz in meiner Webseite... habe sogar versucht, einen \ Tag in der Quell-PHP-Datei zu setzen, aber das hat alles durcheinander gebracht :(

Wie Sie verstehen, bin ich ganz neu in all dem, also wenn mir jemand Zeit nehmen könnte und mir erklären könnte, was ich übersehe, wäre das großartig :) Auch alle anderen Vorschläge/Verbesserungen wären großartig, da dies einer meiner ersten Code-Teile ist :)

im Voraus vielen Dank

3voto

krasatos Punkte 1157

Ich habe es herausgefunden, es scheint ein Problem mit strtolower() und dem UTF-8-Zeichensatz zu geben Ich habe beide Vorkommen von strtolower($string) in der search.php zu: mb_strtolower(($string),'UTF-8') geändert und es hat funktioniert ;)

Der Code sieht jetzt so aus:

sleep( 1 );
if (empty($_GET['term'])) exit ;
//Änderung in der nächsten Zeile:
$q = mb_strtolower(($_GET["term"]),'UTF-8');
if (get_magic_quotes_gpc()) $q = stripslashes($q);

$result = array();
foreach ($items as $value=>$key) {
        //Änderung in der nächsten Zeile:
        if (strpos(mb_strtolower(($key),'UTF-8'),$q ) !== false) {
                array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($value)));
        }
        if (count($result) > 11)
                break;}

echo json_encode($result);

Vielen Dank für die Antworten, Leute :) es war für mich klarer mit einem morgendlichen Verstand + Kaffee :)

Irgendwelche Ideen dazu: "Außerdem, wie Sie in meinem Code sehen werden, habe ich ein Array [id,name] mit meiner aktuellen Konfiguration, (sogar Groß- und Kleinschreibung beachtend) Ich suche nach dem Namen, das Dropdown-Menü erscheint, wenn ich den gewünschten Namen anklicke, wird das Feld mit der ID gefüllt und wenn ich das Formular absende, wird die ID an die nächste PHP-Seite übermittelt.

Gibt es einen Weg, genau dasselbe zu haben, aber anstelle von Befüllen des Feldes mit der ID mit dem Namen zu befüllen? d.h.: Suche nach Namen, erhalte Dropdown mit Namen, klicke und erhalte den Namen im Feld, und wenn ich absende, erhalte ich die ID übermittelt?"

0voto

Jirka Kopřiva Punkte 2681

Sie müssen einen Header hinzufügen, um die PHP-Seite zu beginnen (Index oder einen anderen, den Sie von Ajax aus aufrufen (search.php)).

 header("Content-Type:text/html; charset=utf-8");

0voto

jmort253 Punkte 33083

In der Dokumentation zum Autocomplete-Plugin gibt es eine Option namens matchCase. standardmäßig ist es auf false gesetzt. Ändern Sie das auf true, und die Übereinstimmungen sollten dann nicht auf Groß- und Kleinschreibung achten.

http://docs.jquery.com/Plugins/Autocomplete/autocomplete

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X