2016-05-11 8 views
1

ich ein Suchformular in meiner web2py Anwendung aufgenommen habe, in der folgenden Form:GET Suche in mehrsprachiger Website

myapp/controller/search?query=myquery 

jedoch aus Sicherheitsgründen web2py automatisch ersetzt Leerzeichen und nicht-alphanumerische Zeichen mit Unterstrichen, die ist in Ordnung für Englisch-nur Aufstellungsorte aber ein Hindernis für Sprachen, die Akzentzeichen benutzen. Zum Beispiel gibt die Suche nach "áéíóú" fünf Unterstriche zurück.

Dies könnte durch Verwendung von POST anstelle von GET für das Suchformular gelöst werden, aber dann wären die Benutzer nicht in der Lage, die Ergebnisse mit einem Lesezeichen zu versehen.

Gibt es eine Option, um dies zu lösen?

Vielen Dank im Voraus.

Antwort

1

Hier ist eine Idee, die ich in der Vergangenheit verwendet haben:

  1. Verwenden Beitrag der Abfrage
  2. generieren eine eindeutige Zeichenfolge einreichen (zB youtube: https://www.youtube.com/watch?v=jX3DuS2Ak3g)
  3. Verknüpfen Sie die Abfrage dieser Zeichenfolge und speichern als Schlüssel/Wert-Paar in der Sitzung/app Zustand/db (je nachdem, wie lange wollen Sie es leben)
  4. Leiten Sie den Benutzer auf, dass

Wenn Sie keinen zusätzlichen Speicher/Speicherplatz belegen möchten, da sie in manchen Fällen stark anwachsen, können Sie die Schritte 2-3 durch die Verschlüsselung der Zeichenfolge durch etwas ersetzen, das Sie anschließend entschlüsseln können. Sie können dies in einer Middleware-Klasse tun, damit sie für die Logik Ihrer App transparent ist.

+0

Hallo danke für die Antwort. Ich hatte eine ähnliche Idee, aber ich erwarte etwas mehr web2py-freundlich. Lassen Sie mich auf andere Alternativen warten und falls dies meine beste Wahl ist, werde ich weitermachen und es akzeptieren. – cdonts

1

Dies ist ein allgemeines Problem, mit dem Benutzer beim Umgang mit URLs konfrontiert werden. Sie können das Zitat/quote_plus Modul in urllib verwenden, um die Saiten zu normalisieren -

Zum Beispiel von den Saiten Sie vorgeschlagen -

>>> print urllib.quote('éíóú') 
%C3%A9%C3%AD%C3%B3%C3%BA 
>>> print urllib.unquote('%C3%A9%C3%AD%C3%B3%C3%BA') 
éíóú 

Sie die unquote ausführen müssen, wenn Sie es auf dem Back-End abrufen von der Anfrage.

Es gibt auch einige andere Stellen, die hilfreich sein könnten - urlencode implementation und unicode ready urls

+0

Ich denke, das wird genug sein. Vielen Dank! – cdonts

+0

@cdonts kein Problem :) – minocha

+0

@cdonts Ich bin mir nicht sicher, wie Sie die Suche durchführen oder indexieren, aber um einen Standard zu halten, würde ich vorschlagen, das Zitat unquote zu verwenden und zu utf-8-Ausgabe zu dekodieren, um die Zeichenfolgen zu indizieren die Suche auch, so wirst du nie in Schwierigkeiten geraten beim Indexieren/Suchen – minocha