Unsichtbares Zeichen aus MySQL-Datenbank entfernen

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
hallo,

ich habe eine Wordpress Seite mit Beiträgen und mir ist aufgefallen dass in manchen Beiträgen ein Absatz ist den ich mir nicht erklären kann. bei genauerem Nachschauen habe ich rausgefunden dass das ein "unsichtbares" Zeichen ist, scheinbar U+FEFF. In Notepad++ sieht man das dann :

Code:
danachdavor

jetzt ist die Frage wie entferne ich das aus der Datenbank bei allen Datensätzen ? ich habe es mit einem PHP-script mit str_replace wie folgt versucht aber es bleibt :

PHP:
$cleaned_data = str_replace("\xEF\xBB\xBF", '', $original_data);
 
Versuch es mal mit trim:

PHP:
$cleanText = trim($originalText, "\xEF\xBB\xBF");

Wenn du näheres wissen willst, belies dich zum Thema UTF-8 und BOM.
 
wie genau ? damit leert er post_content komplett:

PHP:
while ($row = $result->fetch_assoc()) {
    $id = $row['ID'];
    $original_data = $row['post_content'];
    $original_data = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $original_data);

    $update_sql = "UPDATE wp_posts SET post_content = '$cleaned_data' WHERE id = $id";
    $conn->query($update_sql);
}
 
wo setzt du denn cleaned_data in deinem Snippet?

Warum musst du das REPLACE ueberhaupt lokal machen? Kann MySQL das nicht?
 
falschen Code gepostet :

PHP:
while ($row = $result->fetch_assoc()) {
    $id = $row['ID'];
    $original_data = $row['post_content'];
    $cleanText = trim($originalText, "\xEF\xBB\xBF");

    $update_sql = "UPDATE wp_posts SET post_content = '$cleanText' WHERE id = $id";
    $conn->query($update_sql);
    echo 'done<br>';
}

auch hier bleibt es vorhanden:

PHP:
$originalText = '><';
$cleanText = trim($originalText, "\xEF\xBB\xBF");
echo $cleanText;
 
Zuletzt bearbeitet:
Pfandfinder schrieb:
Wenn das Theme irgendwelche Probleme mit BOMs hat, würde ich eher den Theme-Autor anhauen. Wobei ein UTF-8-BOM immer so eine Sache ist. Weiß Du denn, wer das BOM hinzugefügt hat?

Weil viele Programmiersprachen inzwischen mit Unicode umgehen können, hast Du mittels der String-Befehle gar keinen Zugriff auf die BOMs mehr. Du müsstest über die Binär-Befehle gehen oder den Text vorher auf eine andere Zeichenkodierung wie US-ASCII casten. PHP scheint das so halb zu tun. Der erste Treffer auf Stackoverflow.com war bei mir dieser … passt der bei Dir?
 
Zurück
Oben