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
Frank Ehrlacher [ So, 29 Juli 2007 16:51 ] [ ID #1781443 ]

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 =
|
------------------------------------------------------------ ------
Niels Braczek [ So, 29 Juli 2007 19:39 ] [ ID #1781451 ]

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
Frank Ehrlacher [ So, 29 Juli 2007 21:31 ] [ ID #1781455 ]

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 =
|
------------------------------------------------------------ ------
Niels Braczek [ Mo, 30 Juli 2007 00:57 ] [ ID #1782174 ]

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/
Sven Drieling [ Mo, 30 Juli 2007 01:00 ] [ ID #1782175 ]
PHP » de.comp.lang.php.misc » URLENCODE und URLDECODE bei +- und &-Zeichen

Vorheriges Thema: Entfernen von HTML Entities für RSS Feed
Nächstes Thema: Stringteil in eckigen klammern löschen?