PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF3\xBE\x8D\x87' - gelöst durch Hack
am 22.12.2013 - 17:56 Uhr in
Hallo,
Wenn ich mit dem Newsfeed-Aggregator Facebook-RSS-Feeds lese und dort Smilies in den Beiträgen vorkommen, stürzt Drupal beim Aktualisieren dieser Feeds mit einem Fehler ab:
PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF3\xBE\x8D\x87' for column 'description' at row 1: INSERT INTO {aggregator_item} (title, link, author, description, guid, timestamp, fid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6); ... in aggregator_save_item() (Zeile 163 von /home4bla/public_html/modules/aggregator/aggregator.processor.inc).
Ein solcher Eintrag (mit so nem Smiley) findet sich z.B. hier: http://www.facebook.com/Schauspielerin.MandyMarieMahrenholz/posts/579190352147253
Dies ist der Feed, den ich lese: https://www.facebook.com/feeds/page.php?id=193885620677730&format=rss20
Da außer mir wohl niemand sonst diesen Fehler hat (Google findet dazu einfach gar nichts), habe ich den Fehler jetzt mit einem Hack in der o.a. Datei umgangen, indem ich die entsprechende Zeichenfolge mit preg_replace rausfiltere:
/* hack: replace Facebook smilies or other UTF32 crap with empty string */
$pattern = '/\xF3\xBE../';
$edit['description']=preg_replace($pattern, "", $edit['description']);
// echo "replaced: " . $edit['description'];
/* --- end of hack --- */
Ich bin kein Programmierer und habe schon so gar keine Ahnung von Multibyte-Sequenzen.
Meine Datenbank und die Tabellen und Spalten sind alle auf "utf8_general_ci" eingestellt. Könnte das das eigentliche Problem sein und was könnte ich tun, um die Tabellen im laufenden Betrieb von utf8_general_ci auf utf32_general_ci umzustellen? Und bringt das überhaupt was?
Den Hack in dem Drupal-Core-Modul möchte ich nur ungern weiter nutzen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Bug im Core
am 28.12.2013 - 00:22 Uhr
Leider kommen Daten aus irgendwelchen Quellen nicht immer Standard-Konform rein. Das kann hier gut möglich sein. Allerdings sollte das Aggregator-Modul diese Daten bereinigen, bevor es diese an die Datenbank übergibt, die ich jetzt erstmal nicht im verdacht hätte. Insofern handelt es sich wahrscheinlich auch um ein Bug in diesem Core-Modul, das auch auf Drupal.org als Issue gemeldet werden sollte. Da gibt es auch sicher eine etwas breiter angelegte Korrektur aber letztlich wäre das auch eine Modifikation im Core. Vllt. gibt es auch einen Workaround, der außerhalb eines Core-Hacks laufen kann. Ich selbst nutze ungern das Aggergator-Modul, da das Feeds-Modul viel flexibler ist und z.B. mehr Ansatz-Punkte bietet, um eingehende Daten zu modifizieren. Aber wenn die Aggregator-Lösung im Live-Betrieb ist, dann ist ein Ersatz vllt. nicht so einfach.
Vllt. hilft aber ein RSS-Feed-Aggregator im Netz, der den direkten Aufruf machen kann und evtl. die Daten bereinigt, bevor der im Moment wahrscheinlich fehlerhafte Drupal-Aggregator mit diesen Zeichen "konfrontiert" wird.
Vielen Dank für deine
am 28.12.2013 - 10:24 Uhr
Vielen Dank für deine Antwort.
Ich will nicht mal sagen, dass der Feed nicht standardkonform ist - ich glaube eher, dass es an der unterschiedlichen Codierung im Feed einerseits und dem, was die Datenbank aufnehmen kann, andererseits liegt. Leider bietet - wie du ja auch sagst - das Aggregator-Modul keinerlei Nachbearbeitungs- oder Einstellmöglichkeit.
Ich hatte mir früher schon mal das Feeds-Modul angeschaut (also auf drupal.org auf der Projekt-Seite), mich hat aber der Status abgeschreckt. Es gibt keine finale Version für Drupal 6, es gibt lediglich eine Alpha-Version für Drupal 7 und jetzt werkeln die Autoren schon an Drupal 8, wo sie dann auch wieder keine finale Version hinbekommen. Schaut man auf die Developer-Releases (die sind am aktuellsten), steht dort, man soll den Code direkt von GIT auschecken. Das alles klingt für mich wenig vertrauenserweckend.
Ich wäre schon bereit, meine Newsquellen mit Feeds neu zu konfigurieren und mir auch neue Views daraus zu basteln, aber dann eben nur, wenn sich der Aufwand auch lohnt.
Kannst du das Feeds-Modul trotz seines Alpha-Status für D7 wirklich (uneingeschränkt) empfehlen?
Feeds als Alpha-Version
am 28.12.2013 - 11:45 Uhr
Insbesondere die Alternative ein selbst gestrickten Core-Hack zu nutzen lässt diese Alpha-Version dagegen sehr stabil ausschauen.
Kannst du das Feeds-Modul trotz seines Alpha-Status für D7 wirklich (uneingeschränkt) empfehlen?
Nun uneingeschränkt kann ich das nicht. Aber es gibt ein paar Eckdaten, die eine fundierte Empfehlung trotz Alpha-Status rechtfertigen.
Zunächst mal sind im Open Source Bereich einige Entwickler sehr zurückhaltend, was das Stable-Versionen betrifft. Andere dagegen sind da zu voreilig und man sollte sich – wenn wie uns hier mal auf Module im drupal.org Repository beschränken – nicht allein auf die Versionsangabe verlassen.
Zunächst mal wird dieses Modul noch aktiv weiter entwickelt und in der Maintainer-Liste stehen ein paar erfahrene Entwickler. Das heißt, wenn es wirklich gravierende Probleme in der letzten Alpha-Version gäbe, die zur Zeit von über 28000 Websites in der Benutzung gemeldet wird, dann würde da wohl schnell etwas passieren, mindestens eine neue Alpha-Version als Sicherheits-Update.
Eine Dev-Version zu nutzen ist dagegen nur ratsam wenn man diese selbst einschätzen kann oder vertrauensvolle, erfahrene Entwickler dazu raten.