Problem mit Zeichen [PHP]

TTlong

Angesehenes Mitglied
Hallo,

hab ein Problem, wo ich einfach nicht weiss, wo ich den Fehler suchen soll.

Ich habe ein Script (SMS-Versand) bei dem die übergebenen Variablen (zusätzlich zum eigentlichen Versand) in einer DB gespeichert werden. Das Problem ist nur, dass die vorhandenen Leerzeichen alle als Pluszeichen (+) in der DB eingetragen werden. Die SMS wird normal mit Leerzeichen ausgeliefert.

Hab jetzt als Notlösung mit str_replace die Pluszeichen durch "richtige" Leerzeichen ersetzt, aber wenn ein User ein + in seiner SMS verwendet, wird dieses ja auch ersetzt, was nicht Sinn und Zweck ist.

Mein Code:

QUOTE $text = str_replace("+", " ", $text);
$einfuegen = "INSERT INTO tabelle (ip, text, date) VALUES ('$ip', '$text', '$current_date')";
$update = mysql_query($einfuegen);


Was läuft falsch?
 
Googele mal nach

SMS Versand

Was siehst Du in der Url? Ein +

Sprich: Das ist einfach das +, das bei GET aus Leerzeichen gemacht wird.

Googele nach

SMS+Versand

und sieh die Url an. So werden + - Zeichen per GET codiert.

Sprich: Irgendwie anders in PHP verarbeiten, da kenne ich mich nicht aus. Da wird es irgendeine Funktion geben.
 
Hm, die Vriablen werden per POST übergeben und so dann im verarbeitenden Script angesprochen:

QUOTE $HTTP_POST_VARS[]


Prinzipiell stört es den User weniger, er bekommt es ja richtig als SMS ausgeliefert, ist nur für mich in der Db, aber dennoch irgendwie ein Schönheitsfehler, der mich stört.
 
Ob das per GET oder per POST ist, ist egal - die Methode ist dieselbe, bloß bei GET sieht man etwas
biggrin.gif


In NET gibt es eine HttpUtility.UrlEncode und eine HttpUtility.UrlDecode - Methode. Die braucht man bsp., wenn man Daten per POST und API an PayPal schickt und die Daten Leerzeichen, . oder ähnliches enthalten.

In PHP sollte es etwas ähnliches geben. In .NET ist das im Normalfall gekapselt, so daß man sich gar nicht darum kümmern muß (bloß in Rohfällen wie PayPal).
 
Lass dir doch mal $HTTP_POST_VARS['text'] oder $_POST['text'] ausgeben bevor du es in die DB speicherst.
zudem kannst du dir mal folgende befehle anschauen
* base64_decode — DekodiertMIME base64-kodierte Daten
* base64_encode — Kodiert Daten MIME base64
* get_headers — Ruft alle Header ab, die der Server als Antwort auf einen HTTP-Request versendet
* get_meta_tags — Liest alle content-Attribute der Meta-Tags einer Datei aus und gibt ein Array zurück
* http_build_query — Erstellen eines URL-kodierten Query-Strings
* parse_url — Analysiert einen URL und gibt seine Bestandteile zurück
* rawurldecode — Dekodiert URL-kodierte Strings
* rawurlencode — URL-Kodierung nach RFC 1738
* urldecode — Dekodiert eine URL-kodierte Zeichenkette
* urlencode — URL-kodiert einen String
 
urldecode($text);

Das wars, auch irgendwie logisch, da etwas weiter oben im Script die, in der Zeichenkette enthaltenen Leerzeichen mit urlencode(); durch ein "+" ersetzt werden.

Danke!
 
Zurück
Oben