Frage

Ich poste den Inhalt eines Formularfeldes über AJAX zu einem PHP-Skript und mit Hilfe von JavaScript zu escape(field_contents). Das Problem ist, dass alle Pluszeichen werden durch Leerzeichen abgezogen und ersetzt. Wie kann ich sicher ‚kodieren‘ auf das Pluszeichen und dann in geeigneter Weise ‚decode‘ auf der PHP-Seite?

War es hilfreich?

Lösung

encodeURIComponent() Verwendung in JS und in PHP sollten Sie die richtigen Werte erhalten.

Hinweis: Wenn Sie $_GET, $_POST oder $_REQUEST in PHP zugreifen zu können, abrufen Werte, die bereits dekodiert wurden.

Beispiel:

Ihre JS:

// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B

Auf dem Server:

echo $_GET['string']; // "+"

Es ist nur die Roh-HTTP-Anforderung, dass die URL-codierten Daten enthält.

Für eine GET-Anfrage können Sie diese aus dem URI. $_SERVER['REQUEST_URI'] oder $_SERVER['QUERY_STRING'] abzurufen. Für eine urlencoded POST, file_get_contents('php://stdin')

Hinweis:

decode() funktioniert nur für einzelne Byte codierte Zeichen. Es wird nicht für den vollen UTF-8-Bereich arbeiten.

Beispiel:

text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100 
// correct
encodeURIComponent(text); // "%C4%80"

Hinweis: "%C4%80" entspricht: escape('\xc4\x80')

Welches ist die Byte-Reihenfolge (\xc4\x80), die Ā in UTF-8 darstellt. Also, wenn Sie Ihre Server-Seite muss encodeURIComponent() verwenden wissen, dass es UTF-8 empfängt. Sonst wird PHP die Codierung mangle.

Andere Tipps

In JavaScript Versuch:

encodeURIComponent() 

und in PHP:

urldecode($_POST['field']);

Der hexadezimale Wert Sie suchen, ist %2B

Um es automatisch in PHP führen Sie Ihre Schnur durch urlencode($stringVal) zu bekommen. Und dann führen Sie es rhough urldecode($stringVal) es zurück zu bekommen.

Wenn Sie die JavaScript wollen sie damit umgehen, verwenden escape( str )

Bearbeiten

Nach @ bobince Kommentar habe ich mehr zu lesen und er ist richtig. Verwenden Sie encodeURIComponent(str) und decodeURIComponent(str). Entfliehen Sie werden die Zeichen nicht konvertieren, nur entkommen sie mit \ des

Um es interessanter zu machen und hoffentlich zu ermöglichen, weniger Haare für jemanden anderen zu ziehen. Mit Python, integrierten Wörterbuch für eine Vorrichtung, die wir curl konfigurieren können.

Problem: {"timezone":"+5"} //throws an error " 5"

Lösung: {"timezone":"%2B"+"5"} //Works

Also, auf den Punkt:

var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])

Durch diesen Beitrag!

Wenn Sie eine Locke in PHP zu tun haben, sollten Sie urlencode() von PHP verwenden, aber individuell!

strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")

Wenn Sie urlencode(strPOST) tun, Sie werden Sie ein anderes Problem bringen, werden Sie ein element1 haben und & wird Änderung% xx Wert sein und als ein Wert sein, siehe hier unten die Rückkehr!

Beispiel 1

$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B

Beispiel 2

$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B

Beispiel 1 ist der gute Weg Zeichenfolge für POST in curl

Vorbereitung

Beispiel 2 zeigen, dass der Rezeptor das gleiche und das Ampersand nicht sieht beiden Werte zu unterscheiden!

mein Problem war, mit den Akzenten (á d e) und dem Pluszeichen (+), wenn ich zu versuchen, „Code-Beispiele“ zu mysql speichern javascript:

meine Lösung (nicht der bessere Weg, aber es funktioniert):

javascript:

function replaceAll( text, busca, reemplaza ){
  while (text.toString().indexOf(busca) != -1)
  text = text.toString().replace(busca,reemplaza);return text;
}


function cleanCode(cod){
code = replaceAll(cod , "|", "{1}" ); // error | palos de explode en java
code = replaceAll(code, "+", "{0}" ); // error con los signos mas   
return code;
}

Funktion zu speichern:

function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();    
var result = null;
$.ajax({
datatype : "html",
data: myData,  
url: url,
success : function(result) {
    alert(result); // result ok                     
},
}); 
} // end function

Funktion in PHP:

<?php
function save($pid,$code){
    $code= preg_replace("[\{1\}]","|",$code);
    $code= preg_replace("[\{0\}]","+",$code);
    mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top