Roger: mod_rewrite: Problem mit "+"

hallo!

Ich versuche mein Newsskript etwas suchmaschinenfreundlicher zu gestalten, indem ich den Titel der Nachricht als ID an den URL übergebe. Damit dann auch die News recht schick werden, soll die Verlinkung als Verzeichnis umgebaut werden. Damit zum Schluss wieder auf mein Skript korrekt verwiesen wird, nutze ich mod_rewrite.
So sieht momentan die Verlinkung aus:
http://www.meineDomain.de/news/Neuer%20Artikel/
Der Artikel wird regulär so aufgerufen:
http://www.meineDomain.de/index.php?news=Neuer%20Artikel

Meine Regel in der .htaccess Datei sieht wie folgt aus:
RewriteEngine On
RewriteRule ^news/(.*)/ /index.php?news=$1

Bisher klappte alles auch. Die Überschriften werden mittels rawurlencode() sicherheitshalber vorbereitet.

Allerdings gibt es ein Problem:
Heute gab es eine Überschrift mit einem Plus (+), welches nicht übergeben wurde.
Der Übergabewert war: "Eins%2BEins"
in $_GET['news'] war dann aber nur noch "Eins Eins" zu finden! Das Plus war durch ein Leerzeichen ersetzt worden!

Wie kommt dass und vor allem, wie kann ich das beheben?
Danke!

gruß.
roger.

--
meine freundin sagt, ich wäre neugierig.
so steht's zumindest in ihrem tagebuch.
  1. Da hast du ein Problem mit dem Zeichensatz. Ich bin mir grade nicht ganz sicher, aber probier es mal mit utf8_decode und utf8_encode vor dem übergeben...
    Irgendsowas müsste helfen.

    1. hallo!

      Da hast du ein Problem mit dem Zeichensatz. Ich bin mir grade nicht ganz sicher, aber probier es mal mit utf8_decode und utf8_encode vor dem übergeben...

      Bringt leider nichts.
      Vorher habe ich das so übergeben:
      rawurlencode($data['headline'])

      und jetzt habe ich noch ein utf8_encode() hingebastelt:
      utf8_encode(rawurlencode($data['headline']))

      Ankommen tut nach wie vor ein Leerzeichen :(

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.
  2. hi,

    Der Übergabewert war: "Eins%2BEins"
    in $_GET['news'] war dann aber nur noch "Eins Eins" zu finden! Das Plus war durch ein Leerzeichen ersetzt worden!

    Na sowas ...!

    Wie kommt dass

    Kommt sich daher, dass das Pluszeichen zur URL-Kodierung eines Leerzeichens definiert ist.

    und vor allem, wie kann ich das beheben?

    Benutze kein Plus-Zeichen in URLs.
    Oder überlege dir, wie du serverseitig das Leerzeichen, das du bekommst, wieder in ein Pluszeichen umwandelst. Überleg dir dann aber auch, wie du das ggf. von "echten" Leerzeichen unterscheidest.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hallo!

      Kommt sich daher, dass das Pluszeichen zur URL-Kodierung eines Leerzeichens definiert ist.

      Wenn ich es als $_GET Variable übergebe (ohne den mod_rewrite-Krempel), dann geht es aber. *heul*

      Benutze kein Plus-Zeichen in URLs.

      Wird wohl die einzigste Lösung bleiben. Leider.

      Oder überlege dir, wie du serverseitig das Leerzeichen, das du bekommst, wieder in ein Pluszeichen umwandelst. Überleg dir dann aber auch, wie du das ggf. von "echten" Leerzeichen unterscheidest.

      Gerade da liegt ja das Problem. Wenn ich das Pluszeichen vorher in ein anderes Zeichen umwandel, dann muss es aber auch reversibel erkennbar bleiben. Woher weiß ich dann ob das ankommende Zeichen das umgewandelte oder es selbst ist?

      Sicherlich hilft dann das Ersetzen von + in meinetwegen --. Aber wenn nun plötzlich "--" im Text auftaucht, hat's gehupt.

      Wohl besser ist es, komplett aus der übergabe herauszufiltern und dass dann bei der Sucher per MySQL zu berücksichtigen. Nur das ist wohl leichter gesagt als getan...

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.