Umlautersetzung in Strings

E

emmy

Aktives Mitglied
Thread Starter
Dabei seit
08.12.2007
Beiträge
298
Reaktionspunkte
5
Hallo Leute,

ich schreibe gerade ein Webshop-CMS und will den Textinhalt überprüfen, bevor ich ihn in die MySQL-DB speicher.
Also will ich alle Umlaute (äöü etc) durch ihre HTML-Kodierung ersetzen.

Zuerst habe ich das hier probiert:
PHP:
	$content = str_replace('ä', 'ä', $content);
das brachte aber keine Ergebnisse (Wenn ich einen Umlaut durch einen anderen Buchstaben ersetzen wollte klappte es seltsamerweise ???)

Also habe ich es mit dem hier probiert:
PHP:
$arr=array("ä"=>"ä","ü"=>"ü","ö"=>"ö","Ä"=>"Ä","Ü"=>"Ü","Ö"=>"Ö","ß"=>"ß","a"=>"X"); 
	$content_raw = $_POST['content']; 
	$content = strtr($content_raw,$arr);
Auch das hatte keinen Erfolg...

Falls ihr euch nun wundert, warum ich kein htmlenteties benutze: Natürlich soll man auch HTML-Code eingeben können, also sollten < und > nicht umgewandelt werden...

Verzeiht alle Rechtschreibfehler, aber es ist mitten in der Nacht und sogar für einen Coder spät :)
Viele Grüße aus den USA, ich hoffe auf Hilfe :)
 
Hi emmy,

nutzt Du unterschiedliche Charsets? Ein UTF-8-Ä ist nicht das gleiche wie ein ISO-8859-1-Ä. Wen Dein Script nun in UTF-8 gespeichert ist, und die Daten aus einer ISO...Quelle stammen..in dem Fall musst Du die Zeichen zuvor konvertieren (utf8_encode/utf8_decode bzw. die Multibyte-String-Funktionen, je nach verwendeten Charsets) bevor du sie vergleichen/ersetzen kannst.

Die Parameter in Deinem str_replace() sind vertauscht. Vielleicht hilft das ja auch schon.

Gruss,
solid
 

Kümmert sich anscheinend nicht um Umlaute, denn
Die konvertierten Auszeichnungen sind: &amp;, &quot; (wenn ENT_NOQUOTES nicht gesetzt ist), ' (wenn ENT_QUOTES nicht gesetzt ist), &lt; und &gt;.

Die Parameter in Deinem str_replace() sind vertauscht. Vielleicht hilft das ja auch schon.

Hatte ich auch erste gedacht, aber wenn ich es mit dem Muster mach-aus-ä-X in der selben Reihenfolge versucht habe, klappt es ... alles sehr merkwürdig :confused:

Das mit dem Charset schau ich mir nachher an.

Danke schonmal soweit
 
Zuletzt bearbeitet:
du sollst die umlaute auch mit htmlentities erschlagen, dann entweder die < und > von hand (sind ja weniger zeichen als die umlaute und einfacher, weil man die kodierung nicht beachten muss) oder mit htmlspecialchars-code zurück wandeln...
 
Das wäre ja dann folgendes:

PHP:
	$content_raw = $_POST['content'];
	$content = htmlentities($content_raw);
	$content = html_entity_decode($content);

Aber nun bin ich genau so weit wie vorher:

1) Ich tippe im Backend Text ein und speichere ihn ab.
2) In der MySQL_DB landen die Umlaute als Klartext (sprich äö etc)
3) In der Textarea im Backend werden sie auch korrekt angezeigt.
4) Im Frontend sind sie aber nicht zu erkennen .... sondern nur die unbekannten Zeichen ...

Wieso kann die Textarea das anzeigen, das Frontend aber nicht ?
 
Noch mal die Frage nach: Unterschiedliche Charsets?

Und hast Du das CMS komplett selbst entwickelt? Werden da beim Verbindungsaufbau zur Datenbank evtl. irgenwelche Verbindungsparameter gesetzt? Stichwort: "SET NAMES 'utf8'"
 
Das wäre ja dann folgendes:

PHP:
	$content_raw = $_POST['content'];
	$content = htmlentities($content_raw);
	$content = html_entity_decode($content);

Aber nun bin ich genau so weit wie vorher:

nicht html_entity_decode, sondern htmlspecialchars_decode...
das entity_decode macht dir ja das htmlentitites komplett rückgängig, während das htmspecialchars nur die <,>, &, ",' umwandelt...

wenn dich das mit den &, ", ' stört, dann wandel halt nur <, > zu fuss...
das brauchst du nur zwei zeichen wandeln, statt 6 für die umlaute...
 
....
Aber nun bin ich genau so weit wie vorher:

1) Ich tippe im Backend Text ein und speichere ihn ab.
2) In der MySQL_DB landen die Umlaute als Klartext (sprich äö etc)
3) In der Textarea im Backend werden sie auch korrekt angezeigt.
4) Im Frontend sind sie aber nicht zu erkennen .... sondern nur die unbekannten Zeichen ...
...

Anstatt die Symptome zu behandeln, würde ich versuchen herauszufinden, wo der Fehler bei Dir mit dem Charset liegt.
Das erscheint mir sinnvoller.
 
Anstatt die Symptome zu behandeln, würde ich versuchen herauszufinden, wo der Fehler bei Dir mit dem Charset liegt.
Das erscheint mir sinnvoller.

Und das sollte sein:

im HTML:
Code:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

im PHP bei der Verbindung mit MySQL
Code:
mysql_query("SET NAMES 'utf8'");

in Deinem Texteditor:
Kodierung auf UTF-8 stellen (wahrscheinlich in "Einstellungen") und Dokument speichern.

in PhpMyAdmin:
Tabellenkodierung und Datenbank auf utf-8-generic (o.ä.) stellen

Sollte nun klappen mit Umlauten in der Datenbank.
 
PHP:
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
DONE
PHP:
ALTER TABLE  `pages` CHANGE  `name`  `name` CHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
DONE

Die gute Nachricht vorab: Es funktioniert !
Soll heißen, ich kann Umlaute eingeben, und sie werden als Umlaute wieder ausgegeben, OHNE, dass ich sie durch ihren HTML-Code ersetzen musste.

Problem: In der MySQL DB steht es immer noch wie folgt:
Wir freuen uns, Sie auf unserer Webpräsenz begrüssen zu dürfen.
Die DB scheint wohl ein Problem mit den Umlauten zu haben, was die Ausgabe nicht stört...

Ich will mich aber eigentlich nicht auf etwas verlassen, dass ich nicht begreife :confused:
 
womit fragst du denn die mysql db ab? mit phpmyadmin?
wähl da doch die richtige kodierung...
mysql speichert schon lange intern die umlaute als utf-8...
 
Das Tabellenfeld ist ja jetzt umgestellt.
Die Ausgabe funktioniert auch. Nur wenn ich IN PHPmyAdmin die Felder betrachte, sehe ich diese Zeichen... Auf der eigentlichen Website funktioniert alles einwandfrei.
 
dann hast du phpmyadmin auf ISO stehen oder das auswahl menü für die kodierung nicht aktiviert beim einloggen...
 
Gib mal folgendes SQL ein
Code:
SET NAMES 'utf8';
SHOW VARIABLES LIKE 'character_set%';

Was zeigt er denn an?
Bist Du sicher, dass Du in PHP in der MySQL Verbindung das SET NAMES an die richtige Stelle gesetzt hast? Es sollte ähnlich zu dem aussehen
PHP:
$conn = mysql_connect('localhost','user1','pass1',TRUE); 
mysql_selectdb('db1',$conn); 
mysql_set_charset('utf8',$conn);

Hast Du Zugriff auf den ganzen Server, kannst Du also Einstellungsdateien von Apache und MySQL ändern?

Welches Programm nutzt Du zum Abrufen von Tabelleneinträgen?
 
Nur wenn ich IN PHPmyAdmin die Felder betrachte, sehe ich diese Zeichen...

Wahrscheinlich ist nicht die gesamte DB auf UTF-8 gestellt.

Klick in pma links auf den DB-Namen (nicht die Tabelle) und gehe auf das Tab "Operations". Links unten kannst Du die "collation" auf "utf8_general_ci" stellen.
 
Zurück
Oben Unten