2010-12-04 6 views
1

Wenn Codierung Newline von Textarea vor dem Speichern in MySQL mit PHP mit rawurlencode Funktion kodiert Newline als %0D%0A.Codierung/Decodierung Textbereich Wert mit Rawurlencode/Rawurlcode

Zum Beispiel: TextArea- Text Benutzer eingegeben:

a 
b 

Codierung rawurlencode und speichert in Datenbank

als a%0D%0Ab Wert speichern, wenn von der Datenbank und Dekodieren Abrufen unter Verwendung rawurldecode nicht und Code funktioniert gibt Fehler. Wie man diese Situation überwinden kann und wie man Textarea-Werte am besten speichert, abruft und anzeigt.

+0

Gibt es einen Grund, Rawlurlencode für riesige Daten wie Textarea zu verwenden? sollte es nicht mit der POST-Methode? – ajreal

+0

Ich benutze Rawurlencode, um alle Symbole vor dem Speichern in der Datenbank zu codieren, nicht für POST – zHs

Antwort

1

können Sie zuerst diese TextArea-Zeichenfolge mit base64_encode kodieren und dann eine base64_decode auf demselben ausführen, wenn das obige nicht für Sie funktioniert. Wenn das Textfeld keine URLs enthält, sollten Sie lieber base64_encode und dann rawurlencode verwenden und dann normal speichern

+0

base64_encode funktioniert soweit, aber base64_decode ('YQ0KYg ==') gab "a b" zurück anstatt a und b in zwei Zeilen zu zeigen. ('YQ0KYg ==' ist der codierte Wert von Textarea mit a und b in zwei Zeilen) – zHs

+1

hey ZHS, ich habe versucht, selbst durchzulaufen, da ich sicher war, was ich sage. 'YQ0KYg ==' ist der codierte Wert für die erforderliche Zeichenfolge (a und b in zwei separaten Zeilen). Wenn Sie jedoch Schwierigkeiten haben, dies in zwei Zeilen zu zeigen, verwenden Sie dies für den dekodierten Wert, z. 'str_replace (PHP_EOL, '\ n', base64_decode ('YQ0KYg =='));', was 'a \ nb' ergibt, wobei '\ n' unser Newline-Zeichen ist. Sie können die Variablen immer mit der 'var_dump'-Funktion ausgeben. – Stoic

+1

Wenn dies eine Benutzereingabetextfläche ist, stellen Sie außerdem sicher, dass Sie die Daten vor dem Speichern in der Datenbank, z. Für mysql können Sie folgendes verwenden: 'mysql_real_escape_string()' – Stoic

0

Zunächst ist es sehr ungewöhnlich, textarea durch urlencode() urlencode wurde nicht für diesen Zweck entwickelt.

Zweitens, wenn Sie dies immer noch tun möchten, kommt vielleicht das Problem aus der Datenbank. Zuerst müssen Sie uns mitteilen, welche Datenbank Sie verwenden und welchen TYPE Sie verwenden, um diese Daten zu speichern: Speichern Sie sie als TEXT- oder als BINARY-Daten? Haben Sie den richtigen Zeichensatz in der Datenbank eingerichtet?

1

Sie sollten einfach nicht rawurlencode für entkommen Daten für Ihre Datenbank.

Jedes Zielformat verfügt über eine eigene Escape-Methode, die im Allgemeinen sicherstellt, dass es sicher von einem Ort zum anderen gespeichert/angezeigt/übertragen wird und am anderen Ende nicht dekodieren muss.

Zum Beispiel:

  • Textes im HTML-Anzeige, Verwendung htmlentities oder htmlspecialchars
  • in der Datenbank zu speichern, verwenden mysqli_real_escape_string, pg_escape_string, etc ...
  • Variablennamen Übertragung, Nutzung urlencode
  • übertragen variabler Inhalt, benutze rawurlencode
  • etc ...

Sie sollten feststellen, dass das Entschlüsseln dieser Dinge oft vom Browser/der Datenbank ausgeführt wird. Es werden also keine Daten gespeichert. Und Decodierung muss nicht von Ihrem Code durchgeführt werden.

Das Problem ist wahrscheinlich, weil Sie eine Sequenz mit Rawurlencode entkommen, aber Ihre Datenbank erwartet das Escape-Format für die spezifische Marke der Datenbank. Und entkam es mit dieser Annahme, die falsch war, was deine Saite durcheinander brachte.

Fazit: Finden Sie heraus, welche Marke Datenbank, die Sie verwenden, suchen die spezifische Escape-Funktion für die Datenbank, und verwenden Sie die richtige Flucht Funktion auf alle Ihre Inhalte „transferral“.


S.S .: einige Definition möglicherweise nicht korrekt, bitte Kommentar dazu. Ich wollte die Idee festhalten, verwende aber wahrscheinlich nicht die richtigen Begriffe.