Hallo Community,
ich ärgere mich nun seit Wochen mit der Problematik von Sonderzeichen.
Ich parse ein xml Dokument und will es in eine mysql Tab. schreiben. In dem Dokument sind viele Sonderzeichen als auch Steuerzeichen. Das Parsen funktioniert einwandfrei,
wenn ich mir die Variablen mit den geparseten Inhalten ausgeben
lasse sieht alles sehr schön aus, doch sobald ich in die db schreibe sind z.bsp. einfache Anführungszeichen falsch ( ’ ) als auch Steuerzeichen.
Habe mir dann mal den insert Befehl ausgeben lassen und mit query browser eingefügt,
auch hier werden dann alle Zeichen korrekt angezeigt.
Um der Sache auf den Grund zu gehen habe ich mittels ngrep mir mal angeschaut, was überhaupt gesendet wird.
Und da sind Anführungszeichen auch nur als "..." dargestellt. Irgendwas scheint mit dem insert nicht zu stimmen.
Php läuft auf der Kommandozeile mit charset utf8 als auch mysql mit utf8. Ich bin mittlerweile ratlos und freue mich über eure Hilfe.
ich ärgere mich nun seit Wochen mit der Problematik von Sonderzeichen.
Ich parse ein xml Dokument und will es in eine mysql Tab. schreiben. In dem Dokument sind viele Sonderzeichen als auch Steuerzeichen. Das Parsen funktioniert einwandfrei,
wenn ich mir die Variablen mit den geparseten Inhalten ausgeben
lasse sieht alles sehr schön aus, doch sobald ich in die db schreibe sind z.bsp. einfache Anführungszeichen falsch ( ’ ) als auch Steuerzeichen.
Habe mir dann mal den insert Befehl ausgeben lassen und mit query browser eingefügt,
auch hier werden dann alle Zeichen korrekt angezeigt.
PHP-Code:
function seems_utf8($Str) {
for ($i=0; $i<strlen($Str); $i++) {
if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
else return false; # Does not match any model
for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
return false;
}
}
return true;
}
function utf8_ensure($str) {
return seems_utf8($str)? $str: utf8_encode($str);
}
....hier wir geparsed
$entry_title = mysql_real_escape_string(utf8_ensure($item->get_title()));
$entry_description = mysql_real_escape_string(utf8_ensure($item->get_description()));
$entry_content = mysql_real_escape_string(utf8_ensure($item->get_content()));
$entry_date = strftime('%Y-%m-%d',$item->get_date());
if($entry_date == "1970-01-01")
$entry_date=date('Y-m-d');
#echo $encoding."<br>".$entry_date."<br>".$item->get_link()."
<br>".$entry_title."<br>".$entry_description."<br><hr>";
echo "$entry_title<br> ";
#exit;
$query = "INSERT INTO blog_items_copy
(id,blog_id,blog_item_url,blog_item_title,blog_item_date,blog_item_desc,blog_item_content,run_date)
VALUES
('','".$feed_ids[$i]."', '".$item->get_link()."', '".$entry_title."','".$entry_date."','".$entry_description."','".
$entry_content."',NOW())
";
echo $query;
if(strlen($query) > 1) {
mysql_query($query);
}
Und da sind Anführungszeichen auch nur als "..." dargestellt. Irgendwas scheint mit dem insert nicht zu stimmen.
Php läuft auf der Kommandozeile mit charset utf8 als auch mysql mit utf8. Ich bin mittlerweile ratlos und freue mich über eure Hilfe.
Kommentar