Warum sperrt decodeURIComponent ('%') meinen Browser?

8

Ich habe gerade etwas mit AJAX getestet und das habe ich bei Erfolg gefunden, wenn ich

alarmiere %Vor%

oder

%Vor%

Der Browser meldet sich mit dem folgenden Code aus.

%Vor%

Wenn ich eine andere Zeichenfolge verwende, funktioniert es gut.
Ist es etwas, das ich vermisst habe?

    
CristiC 16.09.2011, 19:41
quelle

5 Antworten

13

Chrome rastet beim Versuch von der Konsole aus ein. Es gibt einen URIError: URI ist fehlerhaft. Das% ist ein Escape-Zeichen, es kann nicht allein sein.

    
Juan Mendes 16.09.2011, 19:46
quelle
5

Der Punkt ist, dass wenn Sie single % verwenden, es die Logik von decodeURIComponent() function bricht, da es einen zweistelligen Datenwert erwartet, direkt gefolgt von ihm, zB %20 (Leerzeichen).

Es gibt einen Hack herum. Wir müssen zuerst überprüfen, ob decodeURIComponent() tatsächlich auf einer gegebenen Zeichenfolge ausgeführt werden kann und die Zeichenfolge andernfalls nicht zurückgibt.

Beispiel:

%Vor%

Running:

%Vor%

führt zu Uncaught URIError: URI malformed Fehler

während:

%Vor%

gibt die ursprüngliche Zeichenfolge zurück.

Falls Sie einen festen / richtigen URI haben möchten und % in %25 umgewandelt haben, müssen Sie 1 als zusätzlichen Parameter an die benutzerdefinierte Funktion übergeben:

%Vor%     
Ilia Rostovtsev 15.04.2017 11:53
quelle
3

Das Problem hier ist, dass Sie versuchen, das % zu entschlüsseln. Dies ist keine gültige codierte Zeichenfolge. Ich denke, Sie möchten encodieren stattdessen die % .

%Vor%     
Rocket Hazmat 16.09.2011 20:00
quelle
1

Weil die URL fehlerhaft ist (% ist keine URL)

%Vor%

encodeURIComponent() funktioniert

    
genesis 16.09.2011 19:45
quelle
-7

Die Endlosschleife oder das Lock-up kann auf einen Bug in jquery zurückzuführen sein.

Sie können einen Haltepunkt in jQuery an einem Punkt setzen, der wahrscheinlich den 'Lock-up' verursacht.

Die Dekodierung ist nicht sinnvoll, wenn nur % bereitgestellt wird, da auf percent-encoding alphanumerische Zeichen folgen, die auf ein bestimmtes Zeichen in der ASCII-Tabelle verweisen und normalerweise einen URIError in Opera, Chrome, FF ergeben.

Verwenden Sie den integrierten Browser in der Funktion encodeURI , wenn Sie nach der 'url-codierten' Notation des Prozentzeichens suchen:

%Vor%     
Lorenz Lo Sauer 16.09.2011 19:48
quelle