Valure und die Leerzeichen
Eugen
- php
Hallo Welt,
ich kämpfe nun schon zwei Tage mit meinem Script. Bücher, bestehende Beiträge in Foren... haben mich alle nicht weiter gebracht, so daß ich nun mein Problem auf euch los lasse.
Es geht um ne Art News-Script. Folgender Befehl wird durch ne Schleife gejagt und gibt Checkboxen aus, mit denen der Benutzer Querverweisen zu bereits bestehende Artikel angeben kann:
echo"<p><input type="checkbox" name="link[]" value="<a href=index.php?section=news-s&po=$rubrik&id=$id>$titel</a><br>">\n";
Bei der Auswahl einer Checkbox werden die Daten in value in dem Array link[] gespeichert.
Das Problem ist nun das die Variabel $rubrik zwei Wörter enthält (z.B.: Frosch Hans), so daß ab dem Leerzeichen der zu übermittelnde Datensatz abgeschnitten wird.
Merkwürdig ist aber auch warum er nicht das Selbe mit der Variable $titel macht. Die enthält ja auch Leerzeichen, da es sich ja um eine Überschrift handelt und ist auch im value eingeklammert.
Ich habe es schon mit htmlentities() versucht ohne Erfolg. Das einzige was nahe an der Lösung war ist folgendes:
$aa = htmlentities(<a href=index.php?section=news-s&po=);
$bb = htmlentities(&id=$id>$titel</a><br>);
$cc = $aa.$rubrik.$bb;
Wenn ich $cc jetzt mit echo ausgebe funktioniert es. Aber:
echo"<p><input type="checkbox" name="link[]" value=" $cc ">\n";
oder
echo"<p><input type="checkbox" name="link[]" value="".$cc. "">\n";
verursacht wieder das gleiche Problem.
Vielleicht hat je einer von euch schon mal mit solch einen Problem gerungen und kann helfen.
Gruß
Hallo,
Das Problem ist nun das die Variabel $rubrik zwei Wörter enthält (z.B.: Frosch Hans), so daß ab dem Leerzeichen der zu übermittelnde Datensatz abgeschnitten wird.
Du suchst urlencode().
Viele Grüße,
Christian
Du suchst urlencode().
Hallo,
deine Seite ist leider offline.
Im PHP-Handbuch steht zu urlencode():
echo <a href=mycgi?foo=, urlencode ($userinput), >;
folglich müßte mein Zeile so lauten
echo"<p><input type="checkbox" name="link[]" value="<a href=index.php?section= , urlencode(news-s&po=$rubrik&id=$id>$titel</a><br>), ">\n";
Funktioniert auch nicht. Also habe ich folgendes probiert:
echo"<p><input type="checkbox" name="link[]" value="<a href=index.php?section= .urlencode(news-s&po=$rubrik&id=$id>$titel</a><br>). ">\n";
oder
echo"<p><input type="checkbox" name="link[]" value="<a href=index.php?section= urlencode(news-s&po=$rubrik&id=$id>$titel</a><br>)">\n";
wieder nichts.
Danke trotzdem für die schnelle Hilfe!
Hallo Eugen,
echo"<p><input type="checkbox" name="link[]" value="<a href=index.php?section= �, urlencode(news-s&po=$rubrik&id=$id>$titel</a><br>), � ">\n";
Nein! Korrekt wäre:
echo "<p><input type="checkbox" name="link[]" value="<a href="index.php?section=news-s&po=".urlencode($rubrik)."&id=".urlencode($id)."">".htmlspecialchars($titel)."</a><br>">\n";
Viele Grüße,
Christian
Vielen Dank für eure Mühe!!
Jetzt funktioniert es. Da werde ich wohl noch andere Url's codieren müssen. (Was man nicht im Kopf hat, hat man in den Fingern)
Ach so, um die offenstehende Frage zu beantworten:
Die URL setzt sich aus $runrik und &id zusammen und der Name wird durch $titel ausgegeben. Daher dachte ich mir das ich die Querverweise (schon fertig) als String in die Datenbank speichere.
Danke noch mal!
Gruß
Hallo,
echo"<p><input type="checkbox" name="link[]" value="<a href=index.php?section= �urlencode(news-s&po=$rubrik&id=$id>$titel</a><br>)�">\n";
Du willst zuviel codieren.
Codiere jeweils nur den String, der die boesen Zeichen enthalten kann,
hier also nur gerade die Variable $rubrik.
Zudem solltest Du Dich _dringend_ mit der String-Verarbeitung von PHP befassen.
Du hast in Deinem Beispiel zahlreiche Leerzeichen in der URL,
denn Dir ist offenbar nicht klar, dass Du den String unterbrechen musst,
um eine Funktion einzufuegen.
echo "blabla" . funktion() . "blabla".
Lies:
PHP-Manual: Strings, Einfache und doppelte Anfuehrungszeichen, HEREDOC-Syntax,
http://www.php.net/manual/en/language.types.string.php
Zudem muessen die & in & umgeschrieben werden, damit
es valides HTML ist.
Und die URL im Link drin muss in Anfuehrungszeichen stehen,
gerade, wenn sie - wie bei Dir - irgendwelche Sonderzeichen
enthalten kann.
Versuch's mal damit:
echo"<p><input type="checkbox" name="link[]" value="<a href='index.php?section=news-s&po=" . urlencode($rubrik) . " &id=$id'>$titel</a><br>\n";
Dein ganzes Unterfangen, einen vollstaendigen Link als
Checkbox-Wert weiterzugeben, scheint mir allerdings nicht
sehr sinnvoll.
Wodurch ist ein Newsbeitrag eindeutig identifiziert?
Gruesse,
Thomas
Hallo,
echo"<p><input type="checkbox" name="link[]" value="<a href='index.php?section=news-s&po=" . urlencode($rubrik) . " &id=$id'>$titel</a><br>\n";
Sorry, hat natuerlich immer noch Fehler wegen den spitzen Klammern.
Das kommt davon, dass ich:
Dein ganzes Unterfangen, einen vollstaendigen Link als
Checkbox-Wert weiterzugeben, scheint mir allerdings nicht
sehr sinnvoll.
nicht ganz zuende gedacht habe.
Das waere nicht passiert, wenn man den Link vorgaengig definiert,
was alles uebersichtlicher macht.
$linkhtml="<a href='index.php?section=news-s&po=" . urlencode($rubrik) . " &id=$id'>$titel</a>";
$linkcodiert=htmlspecialchars($linkhtml);
echo"<p><input type="checkbox" name="link[]" value="$linkcodiert"><br>\n";
Gruesse,
Thomas