URLENCODE und URLDECODE bei +- und &-Zeichen
Hallo,
ich habe ein Problem mit diversen "+" bzw. "&"-Zeichen im Zusammenhang mit
den URLENCODE und URLDECODE Befehlen.
Eine Zeichenkette (z.B. "Cindy + Bert") soll pe URLENCODE teil der URL
werden, und dort dann für ein anderes Skript wieder "ausgelesen" und per
URLDECODE so umgewandelt werden, dass eine Datenbankabfrage erfolgt werden
Bei dem "+" Zeichen habe ich das Problem, dass es mittels URLENCODE weder
umgewandelt noch maskiert wird, aber per URLDECODE dann entfernt (d.h. die
Datenbankabfrage geht dann auf "Cindy Bert" - und findet keine Treffer).
Verwende ich "&" wird das zwar per URLENCODE korrekt in "%26" (meine ich)
umgesetzt, aber beim URLDECODE geht dann die Zeichenabfrage nur noch auf den
Teil vor dem "&" (in dem Teil "Cindy") - m:E. sieht PHP dann das hinter dem
"&" als 2. Schalter.
Hat einer von Euch eine Idee? Übersehe ich etwas?
Klar, ich könte "Cindy und Bert" schreiben - das sieht aber recht dämlich
aus...
Danke und viele Grüße
Frank
Re: URLENCODE und URLDECODE bei +- und &-Zeichen
Frank Ehrlacher schrieb:
> ich habe ein Problem mit diversen "+" bzw. "&"-Zeichen im Zusammenhang =
mit
> den URLENCODE und URLDECODE Befehlen.
>
> Eine Zeichenkette (z.B. "Cindy + Bert") soll pe URLENCODE teil der URL =
> werden, und dort dann für ein anderes Skript wieder "ausgelesen" und =
per
> URLDECODE so umgewandelt werden, dass eine Datenbankabfrage erfolgt wer=
den
Lass urldecode() weg. Das macht PHP automatisch, wenn die Daten von
außen ankommen.
var_dump() ist dein Freund.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: URLENCODE und URLDECODE bei +- und &-Zeichen
Hallo Niels,
Danke für die Antwort und den Tipp:
> Lass urldecode() weg. Das macht PHP automatisch,
Das wusste ich wirklich noch nicht.
Aber leider löst es mein Problem nicht.
Vielleicht muss ich etwas mehr erklären:
Ich nehme eine Variable - z.b: $xyz - aus der Datenbank, URLencode sie und
verlinke auf die seite xyz.htm.
In einem anderen skript wandelt die .htacess die xyz.htm in site.php?id=xyz
um und mit $xyz führe ich dann in MySQL eine Datenbankabfrage durch .. .das
klappt mit allen Sonderzeichen etc. ä, ö, ü .. sogar ' - nur nicht mit +
und &
Beispiel:
$xyz enthält "Cindy + Bert"
die Seite cindy+++bert.htm wird verlinkt, aber im auslesenden script kommt
als wert für $xyz dann nur noch 'cindy bert' an.
Der Fall mit dem "&" ist erklärlich, weil die .htacess dann
site.php?id=cindy+&+bert zurückbekommt und alles nach dem & als 2.
Schalter/Argument ignoriert.
Das heißt aber (meine ich) ich müsste + oder & zusätzlich "verschlüsseln" ,
oder ...?
Dnke noch mal
Frank
Re: URLENCODE und URLDECODE bei +- und &-Zeichen
Frank Ehrlacher schrieb:
> Beispiel:
> $xyz enthält "Cindy + Bert"
urlencode("Cindy + Bert") ergibt korrekt "Cindy+%2B+Bert",
urlencode("Cindy & Bert") ergibt korrekt "Cindy+%26+Bert".
Dein Problem liegt woanders.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: URLENCODE und URLDECODE bei +- und &-Zeichen
Frank Ehrlacher wrote:
Hallo,
> Der Fall mit dem "&" ist erklärlich, weil die .htacess dann
> site.php?id=3Dcindy+&+bert zurückbekommt und alles nach dem & als 2=
..
> Schalter/Argument ignoriert.
Daran lieg es. Durch die Rewrite Rule wird wohl vom Apache die URL
zweimal dekodiert und das + steht dann beim zweiten Mal für
ein Leerzeichen.
Beim Stellen von Fragen möglichst ein minimales Beispiel
mit Posten, das den Effekt reproduziert. Das erleichtert
anderen das Verstehen des Problems.
index.php
<?php
$url =3D urlencode('cindy+++bert.htm');
echo "<a href=3D'{$url}'>link</a>";
?>
site.php
<pre>
<?php
var_dump($_GET);
?>
</pre>
..htaccess
RewriteEngine on
RewriteRule ^(.*)\.htm$ site.php?id=3D$1
> Das heißt aber (meine ich) ich müsste + oder & zusätzlich "vers=
chlüsseln"
> , oder ...?
Ist eine Möglichkeit. Als Workaround funktioniert z.B. ein zweimalig=
es
urlencode().
$url =3D urlencode(urlencode('cindy+++bert.htm'));
Eventuell bietet .htaccess auch eine Lösungsmöglichkeit
-> de.comm.software.webserver
Vielleicht reagiert Apache auch unterschiedlich je nachdem, ob
die Rewrite Rule in http.conf oder .htaccess definiert ist
(nicht ausprobiert).
tschuess
[|8:) http://www.sven-drieling.de/