Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

wie Pluszeichen in URL verwenden (PHP) ?

hansapark / 5 Antworten / Baumansicht Nickles

Hallo.

Wie kann ich mit PHP eine URL mit dieser Form verwenden ?

http://seite.xy/tags/letter/+

(Es werden dann in einer MySQL-Datenbank alle Tags gesucht, die mit + anfangen) 

Mit "a" oder "X" oder ":" (doppelpunkt) klappt es, aber das plus verwandelt sich immer in ein Leerzeichen, auch wenn ich urlencode() verwende und auf Serverseite dann urldecode() ..

(Ich habe soweit ich das verstehe, versucht , möglichst überall UTF-8 einzustellen. als framework verwende ich laravel)

bei Antwort benachrichtigen
hansapark Nachtrag zu: „wie Pluszeichen in URL verwenden (PHP) ?“
Optionen

ich mache es jetzt erstmal so, das scheint zu klappen:

if($letter == " "){
  $letter = urlencode($letter);
}

da wird aus dem Leerzeichen ein + gemacht

bei Antwort benachrichtigen
Borlander hansapark „ich mache es jetzt erstmal so, das scheint zu klappen: if ...“
Optionen

Das ist aber so ein bisschen wundersam wie Du da vorgehst ;-)

Das Pluszeichen wurde traditionell dafür genutzt um Leerzeichen innerhalb von URLs zu codieren. Daher liefert die urlencode(' ') entsprechend '+' zurück.

urlencode('+') sollte entsprechend '%2B' zurückliefern, was sich auch für eine saubere Übermittlung per URL anbieten würde…

bei Antwort benachrichtigen
hansapark Borlander „Das ist aber so ein bisschen wundersam wie Du da vorgehst - ...“
Optionen

Ok. 

Danke für die Antwort.

Ich hatte das so gemacht, damit in der URL beispielsweise seite.de/tags/+-0 steht, anstatt seite.de/tags/%2B-0 . Hielt das für 'sauberer' oder irgendwie 'schöner' als wenn ich die Links generell url-encodiere. Das macht ja dann auch aus Umlauten und ß entsprechende Zeichenkombinationen.

Ich weiß aber nicht, wie sich das mit nicht deutschen Tastaturen oder Systemen und Umlauten verhält. 

In meinen 'Tags' kommen auch Zeichen vor wie das französische e mit accent oder z.b. die 'Schneeflocke' * oder sowas :) 

Vermutlich sollte ich es doch lieber urlencoden.

bei Antwort benachrichtigen
Borlander hansapark „Ok. Danke für die Antwort. Ich hatte das so gemacht, damit ...“
Optionen
Hielt das für 'sauberer' oder irgendwie 'schöner'

Optisch schöner auf jeden Fall. Da stimme ich ganz klar zu. Sauber aber eher nicht würde ich sagen.

In meinen 'Tags' kommen auch Zeichen vor wie das französische e mit accent oder z.b. die 'Schneeflocke' * oder sowas :)  Vermutlich sollte ich es doch lieber urlencoden.

Wäre auf jeden Fall sicherer. Musst dann aber in jedem Fall auch aufpassen mit einheitlicher Zeichensatzcodierung…

bei Antwort benachrichtigen
hansapark Borlander „Optisch schöner auf jeden Fall. Da stimme ich ganz klar ...“
Optionen

Ich urlencode nun alle 'tags' für die Anfragen beim Server so in der Art:

<?php echo "<a href='/seite/".urlencode($tag)."'>".$tag."</a>"; ?>

Interessanterweise bleiben Umlaute, ß und auch ´ unverändert in der URL. Das Pluszeichen wird in %2B umgewandelt und Leerzeichen werden zu + . Mit dem Plus als Platzhalter sieht es auch besser aus als "ein%20beispiel%20tag". Auf der 'Zielseite' mache ich kein urldecode, es scheint so zu klappen.

Zum Glück bleibt die Mysql-Datenbank davon bis jetzt unberührt. Da wird bis jetzt alles ohne urlencode o.ä. eingetragen. (Habe davon gelesen, dass da die verrücktesten Probleme auftreten können, mit Zeichenkodierung und Kollation )

bei Antwort benachrichtigen