dedlfix: „ und “ in MySQL Schreiben

Beitrag lesen

Tach!

Wenn in einem der Einträge aber ein richtiges Anführungszeichen (nur Englisch oder Deutsch, die Französischen gehen) vorkommt, dann bricht MySQL den Eintrag ab.
Aus
"Das ist ein „Beispieltext“"
Wird in die Datenbank dann nur das eingetragen:
"Das ist ein "

Schau dir MySQLs Warnungen an. SHOW WARNINGS ausführen und das Ergebnis fetchen und anzeigen. Dann wirst du vermutlich eine mit dem Wortlaut

Incorrect string value: '\x84Beisp...' for column 'text' at row 1

sehen. Das ist ein Zeichenkodierungsproblem. MySQL erwartet UTF-8, du sendest aber keins. Löse dieses Problem, indem du die beiden Grundsätze verstehst und entsprechende Vorkehrungen triffst:

  • Jedes beteiligte System muss mit der gewählten Zeichenkodierung umgehen können, solange es nicht nur unbesehen durchreicht.
  • Zwischen zwei Systemen muss die verwendete Zeichenkodierung bekannt(gegeben) sein und verwendet werden.

Verwende durchgängig UTF-8 und mach dir klar, wer alles mit wem spricht in deiner Verarbeitungskette. Alles weitere findest du im Themenschwerpunkt Zeichenkodierung.

Ich verwende HTML htmlentities() und habe es auch schon mit
$text = str_replace("„","„",$text);
versucht.

Das ist eine Anwendung zum falschen Zeitpunkt und eine unnötige noch dazu. (siehe im bereits verlinkten Kontextwechsel-Artikel den Abschnitt HTML in der Datenbank)

Das bringt leider nichts, da das Zeichen einfach nicht ersetzt wird. Wenn ich dort die Zeichen austausche (beispielsweise "a" durch "b" ersetze) klappt es.

Auch hier hast du wieder ein Zeichenkodierungsproblem. Schau dir an, was ankommt und was du zu ersetzen versuchst. Dazu kannst du die Funktion urlencode() sehr gut <del>missbrauchen</del><ins>verwenden</ins>.

var_dump(urlencode("„"));
  var_dump(urlencode($text));

Das „ wird unterschiedlich kodiert sein, weswegen PHP keine Übereinstimmung findet. Das heißt, deine PHP-Code-Datei ist nicht UTF-8-kodiert oder deine Daten sind es nicht.

dedlfix.