2012-05-11 7 views
5

sagen, dass ich eine einfache Form wie dieses:Wie URL-Kodierung in Form GET-Anfrage, von Javascript, wenn Akzente und dergleichen beteiligt sind reproduzieren?

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 
    <body> 
    <div id="search"> 
     <form method="GET" action="/super-action"> 
     <input type="text" name="q" /> 
     </form> 
    </div> 
    </body> 
</html> 

mit einem Eingang wie: @tags "Cinéma Whatever"

ein Formular GET-Anfrage führt zu einer URL, die wie folgt aussieht: /super-action?q=%40tags+"Cinéma+Whatever"

Jetzt möchte ich reproduzieren das mit Javascript in location.hash, mit einem Pfundzeichen anstelle eines Schrägstrichs, wie: /super-action#q=%40tags+"Cinéma+Whatever"

Aber mit den verfügbaren Funktionen, bekomme ich dort Ergebnisse:

  • escape (Eingang): @tags%20%22Cin%E9ma%20Whatever%22
  • encodeURI (Eingang): @tags%20%22Cin%C3%A9ma%20Whatever%22
  • encodeURIComponent (Eingang): %40tags%20%22Cin%C3%A9ma%20Whatever%22
  • $ (Form) .serialize(), ohne q =: %40tags+%22Cin%C3%A9ma+Whatever%22

Die Frage: Wie kann ich einen Eingabewert, wie @tags "Cinéma Whatever", aussehen wie eine Form GET-Anfrage tun würde: %40tags+"Cinéma+Whatever" mit Javascript?

+0

Ich verstehe nicht genau, was Sie wollen, die GET-URL hat ein '?', Während die Zeichenfolge, die Sie machen möchten, ein '#' an seiner Stelle hat. Ist es richtig? Sie hätten gerne die gleiche Zeichenfolge wie bei einer GET-Anfrage, aber mit dem '' 'durch' # 'ersetzt? –

+0

Wenn Sie eine js-Bibliothek zu Ihrer Seite hinzufügen möchten, habe ich möglicherweise eine Lösung. Ich würde gerne wissen, ob Ihre codierte URL-Zeichenfolge zuerst ein Fragezeichen oder ein Nummernzeichen haben soll. –

+0

@Fabrico: Was ich versuche zu erreichen, ist ein Suchformular, das sowohl mit ajax als auch ohne funktioniert, wobei die gleiche Abfragezeichenfolge in der URL mit einem (#) oder einem (?) Verwendet wird. Auf diese Weise, wenn jemand eine URL mit dem Hash (#) bookmarken und zurückkommt, hole ich das Suchergebnis mit Javascript, indem ich alles, was nach diesem Hash ist, an den Server mit einem (?) Übertrage. Es könnte immer noch funktionieren, wenn Sonderzeichen wie "é" "% E9" ist, könnte PHP es wahrscheinlich auf der Serverseite konvertieren. Aber ich hatte gehofft, ich könnte das gleiche Konvertierungsformular verwenden, das GET macht. – bksunday

Antwort

4

Nach RFC 1738 ist /super-action?q=%40tags+"Cinéma+Whatever" innerhalb einer URL nicht gültig:

also nur alphanumerische Zeichen, die Sonderzeichen und reservierte Zeichen verwendet für "$ -_ + * '()." Ihre reservierten Zwecke können innerhalb einer URL ohne Codierung verwendet werden.

Das bedeutet, dass Sie nicht eine gültige URL mit dieser Unter darin erzeugen. Sie müssen die Sonderzeichen " und é codieren, andernfalls ist die resultierende Zeichenfolge keine URL.

Der Grund, warum Sie denken Dies ist möglicherweise gültig, dass Ihr Browser Tricks auf Sie spielt: Es könnte die URL in teilweise codierte Form angezeigt werden, um es einfacher zu lesen in der Adressleiste. Verwenden Sie einen Protokollanalysator wie Wireshark, um den tatsächlichen URL-Pfad zu prüfen, der über das Netzwerk gesendet wird.

UPDATE: ich dies schnell bestätigt, in Reaktion der HTTP-Header zu einem Formular gesendet einzureichen ist folgende:

GET /?q=%40tags+%22Cin%C3%A9ma+Whatever%22 HTTP/1.1 

So ist es zunächst UTF-8 kodiert und dann verschlüsselt URL.

+0

Sie haben Recht, google Chrom und firefox spielen mir Streiche Wenn ich nur die URL auswähle und sie kopiere (CTRL-C), wenn ich sie irgendwo anders einfügen werde die "" und "é" Zeichen beide kodiert. Vielen Dank – bksunday

Verwandte Themen