Ich poste den Inhalt eines Formularfeldes über AJAX in ein PHP-Skript und verwende JavaScript dazu escape(field_contents)
. Das Problem ist, dass alle Pluszeichen entfernt und durch Leerzeichen ersetzt werden. Wie kann ich das Pluszeichen sicher "codieren" und es dann auf der PHP-Seite entsprechend "decodieren"?
98
Antworten:
Verwenden Sie
encodeURIComponent()
in JS und in PHP sollten Sie die richtigen Werte erhalten.Hinweis: Wenn Sie auf oder in PHP zugreifen
$_GET
, rufen Sie Werte ab, die bereits dekodiert wurden.$_POST
$_REQUEST
Beispiel:
In Ihrem JS:
Auf Ihrem Server:
Nur die rohe HTTP-Anforderung enthält die URL-codierten Daten.
Für eine GET-Anfrage können Sie diese aus dem
URI. $_SERVER['REQUEST_URI']
oder abrufen$_SERVER['QUERY_STRING']
. Für einen urlencodierten POSTfile_get_contents('php://stdin')
NB:
decode()
funktioniert nur für Einzelbyte-codierte Zeichen. Es funktioniert nicht für den gesamten UTF-8-Bereich.z.B:
Hinweis:
"%C4%80"
entspricht:escape('\xc4\x80')
Welches ist die Byte-Sequenz (
\xc4\x80
), dieĀ
in UTF-8 darstellt. Wenn Sie alsoencodeURIComponent()
Ihre Serverseite verwenden, müssen Sie wissen, dass sie UTF-8 empfängt. Andernfalls wird PHP die Codierung entstellen.quelle
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
oder<meta charset="UTF-8">
Sie können es auch in PHP mit dem HTTP-Header vom Inhaltstyp festlegen.header('Content-Type: text/html;charset=UTF-8');
PS: & rsqo; dekodiert nicht im Browser (FF3.5).Versuchen Sie in JavaScript:
und in PHP:
quelle
urldecode
ist auch weit weg, da PHP es automatisch dekodiert, bevor es aufgefüllt wird$_POST
.Der gesuchte Hexadezimalwert ist
%2B
Um es automatisch in PHP zu bekommen, führen Sie Ihren String durch
urlencode($stringVal)
. Und dann laufen Sie es durchurldecode($stringVal)
, um es zurück zu bekommen.Wenn Sie möchten, dass das JavaScript damit umgeht, verwenden Sieescape( str )
Bearbeiten
Nach dem Kommentar von @ bobince habe ich mehr gelesen und er hat Recht. Verwenden Sie
encodeURIComponent(str)
unddecodeURIComponent(str)
. Escape konvertiert die Zeichen nicht, sondern maskiert sie nur mit\
'squelle
escape
(oderunescape
) in JavaScript; Sie sind nicht mit der URL-Codierung identisch und gehen bei + und allen Nicht-ASCII-Unicode-Zeichen schief. encodeURIComponent / decodeURIComponent ist fast immer das, was Sie wollen.Um es interessanter zu machen und hoffentlich weniger Haare ziehen für jemand anderen zu ermöglichen. Mit Python erstelltes Wörterbuch für ein Gerät, das wir mit Curl konfigurieren können.
Problem:
{"timezone":"+5"} //throws an error " 5"
Lösung:
{"timezone":"%2B"+"5"} //Works
Also auf den Punkt gebracht:
Danke an diesen Beitrag!
quelle
Wenn Sie eine Locke in PHP machen müssen, sollten Sie
urlencode()
von PHP aber individuell verwenden!Wenn Sie dies tun
urlencode(strPOST)
, werden Sie ein weiteres Problem bekommen, Sie werden einen Item1 haben und & werden% xx Wert ändern und als ein Wert sein, siehe hier unten die Rückgabe!Beispiel 1
Beispiel 2
Beispiel 1 ist der gute Weg, um einen String für POST in Curl vorzubereiten
Beispiel 2 zeigt, dass der Rezeptor nicht das gleiche und das kaufmännische Und sieht, um beide Werte zu unterscheiden!
quelle
Mein Problem war mit den Akzenten (á É ñ) und dem Pluszeichen (+), als ich versuchte, Javascript "Codebeispiele" in MySQL zu speichern:
meine Lösung (nicht der bessere Weg, aber es funktioniert):
Javascript:
Funktion zum Speichern:
Funktion in PHP:
quelle