Probleme mit Wunsch- und Gruß-System

Hi liebe Freunde,

ch bin dabei, für mein Webradio das Wunsch und Gruß system upzudaten, da wir neue Moderatoren bekommen, und dementsprechend das System erweitern müssen.
Dabei will ich einen alten Bug bereinigen!

Bei der Band D’espairs Ray wird der Name zwar richtig angezeigt, wenn ich ihn aber in einer Variable übergeben will, dann wird aus dem D’espairs plötzlich ein D. Klar, das ’ ist im Weg.

Aber wie kriege ich aus dem ’ ein ’ (was mich erstmal nicht stört, das kriegen eh nur die Moderatoren so zu gesicht).

Mit

str_replace("’", „’“, $artist);

klappt es nicht.

Bitte um einen Denkanstoß oder eine Lösung

Grüße

ZeroEnna

„’“ kann auch nicht funktionieren, da es das Gleiche ist wie „’“. Der Backslash maskiert bestimmte Zeichen und dazu zählt auch das einfache Hoch-Komma. Du müsstest aus „’“ einfach „\’“ machen, denn ein doppelter Backslash maskiert eben jenen -> Der erste maskiert und der Zweite ist das zu maskierende Zeichen. Es ist ein bisschen verwirrend, aber leider geht es nicht ander, sonst hätte man an anderen Stellen größere Probleme mit Zeichenketten.

MfG
Lutz

Und was kann ich tun, um das Hochkomma so zu „maskieren“ dass es trotzdem angezeigt wird, nur halt eben von PHP nicht als Hochkomma erkannt wird (was wohl als Steuerzeichen intertpretiert wird? HTML-Entities?

Unicode / html-code wird dir helfen:
aus ’ wird & #39; (Achtung: leerzeichen entfernen!!)

Hier für dich:
http://www.homepage-total.de/html/unicode-tabelle.php

Gruß Sebastian

Normalerweise müsste nach:

$var = str_replace ("’", „\’“, $var);

das Hochkomma maskiert im String enthalten sein, sodass PHP es ohne Probleme ausgibt!? htmlentities() ist eigentlich nur bei anderen Sonderzeichen nötig, allerdings kann es auch sein, dass je nach verwendetem Zeichensatz das Hochkomma in der Variablen nicht dem einfachen Hochkomma auf der Tastatur entspricht. PHP kann manchmal durcheinander kommen, wenn verschiedene Zeichensätze verwendet werden. Was ist denn die Quelle der Daten? Eine Datenbank? Welchen Zeichensatz verwendet die DB, die Tabelle, das Feld und die Verbindung zur Datenbank?

Ich würde sonst auch einfach nochmal testen, ob folgender Code Wirkung zeigt:

$var = str_replace ("’", "->TestTest

Ja, es ist ein „normales“ Hochkomma, und mit HTML-Entities funzt die AUsgabe auch recht gut. Jetzt ist natürlich die Frage: Wie bring ich jetzt MySQL bei, dass ein ’ im String is? Er bricht natürlich immer ab

Unter normalen Umständen kommt es immer dann zu derartigen Problemen, wenn aus der PHP-Variablen bestimmte Zeichenketten erzeugt werden. SQL-Statements sind solche Zeichenketten, bei denen dann Probleme auftreten. Selbst wenn das „’“ in der Variablen maskiert ist und somit so: „’“ aussieht, kann es sein, dass bei der Generierung des SQL-Statements widerum diese Maskierung bereits „genutzt“ wird und aus „’“ wieder „’“ wird. Entsprechend würde folgender Code:

$sql = „SELECT * FROM tabelle WHERE name=’“.$var."’";

folgenden Inhalt in $sql bewirken:

SELECT * FROM tabelle WHERE name=‚text mit Hochkomma: D’Bandname‘

Das kann von SQL natürlich nicht korrekt interpretiert werden. Also muss der bereits maskierte Inhalt der Variablen erneut maskiert werden. Statt „’“ würde dann entsprechend „\’“ enthalten sein. Klingt kompliziert, ist es auch ein bisschen. Man muss sich nur vor Augen führen, dass PHP bei jeder Anwendung der entsprechenden Variable die Maskierung entsprechend interpretiert, bevor das neue Ergebnis gespeichert oder weiterverarbeitet wird.