String vs. '

hiho!

ich habe ein problem, dass wenn ich in einem string ein ’ habe, dass danach alles abgeschnitten wird!

also ich habe einen kompletten string, z.b.

wie geht’s so?

diesen lese ich aus einer datenbank aus.
wenn ich diesen string allerdings bearbeiten will und in einem forumular-text feld

...

dann sehe ich dort nur

wie geht

was natürlich verheerend is, wenn ich nich dran denke und dann den string wieder in die datenbank eingebe.
ich habe schon htmlspecialchars() versucht, aber irgendwie kommt er damit nicht zurecht :frowning:
interessant auch, es ist nur in diesem textfeld!
wenn ich einfach
echo $string;
mache, sehe ich alles!

wie kann ich das lösen?

mfg
Geisterkarle

beim Schreiben in die Datenbank solltest du die Funktion „addslashes“ verwenden.

siehe:
http://de3.php.net/manual/de/function.addslashes.php

Hi,

ich habe ein problem, dass wenn ich in einem string ein ’
habe, dass danach alles abgeschnitten wird!

Du meinst, wenn

zu diesem Ergebnis führt:

Selbstverständlich, schließlich hast Du mit dem zweiten „’“ den Attributwert beendet. addslashes() hilft da nichts, da nicht der PHP-Code, sondern der erzeugte HTML-Code defekt ist.

Ich empfehle, die HTML-Attribute *nicht* mit Singlequotes, sondern kompatibel zu allen SGML-Standards mit Doublequotes einzukleiden. Die entsprechende Kodierung - " - befindet sich nicht ohne Grund im Bauch ausnahmsfrei jeden XMLs, egal welche Entities noch definiert werden. Erzeuge also den HTML-Code mit Doublequotes, und ersetze dieses HTML-Sonderzeichen durch seine Entity. Sorge bei der Ausgabe von HTML-Code *immer* für die korrekte Kodierung, d.h. insbesondere auch, dass jedes (*jedes!*) „&“-Zeichen, welches keine Entity einleitet, durch & zu ersetzen ist. Immer. Zwingend. Ja, auch in URLs.

ich habe schon htmlspecialchars() versucht, aber irgendwie
kommt er damit nicht zurecht :frowning:

Exakt der richtige Weg. Nur geht der PHP-Interpreter zu Recht davon aus, dass Du Dich im Kontext von Doublequotes befindest. Singlequotes sind nicht wirklich „HTML-Special-Chars“.

interessant auch, es ist nur in diesem textfeld!
wenn ich einfach
echo $string;
mache, sehe ich alles!

Wenn Du in den Quellcode der Ausgabe siehst, ist dort auch alles, was Du ausgegeben hast.

Cheatah

Hi,

hiho!

Ich empfehle, die HTML-Attribute *nicht* mit Singlequotes,
sondern kompatibel zu allen SGML-Standards mit Doublequotes
einzukleiden. Die entsprechende Kodierung - " -
befindet sich nicht ohne Grund im Bauch ausnahmsfrei jeden
XMLs, egal welche Entities noch definiert werden. Erzeuge also
den HTML-Code mit Doublequotes, und ersetze dieses
HTML-Sonderzeichen durch seine Entity. Sorge bei der Ausgabe
von HTML-Code *immer* für die korrekte Kodierung, d.h.
insbesondere auch, dass jedes (*jedes!*) „&“-Zeichen, welches
keine Entity einleitet, durch & zu ersetzen ist.
Immer. Zwingend. Ja, auch in URLs.

wenn ich per echo „…“; schreibe, mache ich halt hauptsächlich singlequotes, denn die ganzen doppelquotes muss ich ja sonst per " markieren.
aber hier musste ich ja nur value="…" machen!

ich habe schon htmlspecialchars() versucht, aber irgendwie
kommt er damit nicht zurecht :frowning:

Exakt der richtige Weg. Nur geht der PHP-Interpreter zu Recht
davon aus, dass Du Dich im Kontext von Doublequotes befindest.
Singlequotes sind nicht wirklich „HTML-Special-Chars“.

na, wenigstens was richtiges versucht :wink:

Cheatah

damit wäre das problem auf jeden fall gelöst!
thx!

mfg
Geisterkarle

Hi,

wenn ich per echo „…“; schreibe, mache ich halt
hauptsächlich singlequotes, denn die ganzen doppelquotes muss
ich ja sonst per " markieren.

warum schreibst Du dann nicht einfach echo ‚…‘? Abgesehen davon: Das _Ergebnis_ muss stimmen, nicht der Weg dahin. Und in HTML sollten - oder müssen, je nach DOCTYPE - Attributwerte nun mal in Doublequotes stehen. Wenn Dich dann der PHP-Code stört, ist möglicherweise PHP nicht die Technik Deiner Wahl, oder Du setzt sie falsch ein.

damit wäre das problem auf jeden fall gelöst!

Das freut mich :smile:

Cheatah

Hi,

wenn ich per echo „…“; schreibe, mache ich halt
hauptsächlich singlequotes, denn die ganzen doppelquotes muss
ich ja sonst per " markieren.

warum schreibst Du dann nicht einfach echo ‚…‘? Abgesehen
davon: Das _Ergebnis_ muss stimmen, nicht der Weg dahin.

Naja, eigentlich sollte beides stimmen, sonst ist, logischerweise, ja irgendetwas falsch… :smile:

Und
in HTML sollten - oder müssen, je nach DOCTYPE - Attributwerte
nun mal in Doublequotes stehen. Wenn Dich dann der PHP-Code
stört, ist möglicherweise PHP nicht die Technik Deiner Wahl,
oder Du setzt sie falsch ein.

Also im normalen HTML (ich weiss jetzt nicht genau ob eine der neueren Varianten es verbietet) kann man laut Standard sowohl Double als auch Single-Quotes verwenden. Aber spätestens wenn man XHTML-kompatible Seiten erzeugen will, MUSS man Doubles nehmen, da es von XML abstammt.

Es ist sowieso in PHP meistens übersichtlicher (weil viele Editoren Variablen in Strings nicht richtig highlighten) und auch schneller!, wenn man Strings in Single-Quotes packt, da diese nicht vom Parser auch evtl. zu ersetzende Variablen geprüft werden.

Also statt
echo „foobar $string barfoo“;
nehme ich normalerweise
echo ‚foobar ‚.$string.‘ barfoo‘;

Der Overhead für’s Parsen sollte sich zwar in Grenzen halten, aber wenn man ALLE Strings in Doubles packt, auch wenn keine Variablen drinne sind, summiert’s sich…

Der nette Nebeneffekt dabei ist halt, dass man problemlos XHTML damit erzeugen kann, ohne tausende Escapes zu tippen:
echo '’.$title.’
';

Nur wenn man unbedingt Newlines oder Tabs braucht sollte man Double-Quotes nehmen.