2009-03-22 5 views
-2

Ich füge etwas Text von Scraped Web in meine Datenbank ein. Einige der Felder in der Zeichenfolge haben nicht druckbare/seltsame Zeichen. Zum BeispielRails ActiveRecord: Einfügen von Text, der nicht druckbare/seltsame Zeichen enthält

if text is "C__O__?__P__L__E__T__E", 
then the text in the database is stored only as "C__O__" 

Ich kenne h(), strip_tags() ... sanieren, ... etc etc. Aber ich will nicht, diese SQL sanieren. Der ActiveRecord protokolliert das SQL korrekt, und wenn es in phpMySQL ausgeführt wird, wird die Abfrage ordnungsgemäß ausgeführt. Es passiert etwas zwischen der SQL-Abfragegenerierung und der Ausführung.

Hilfe wird sehr geschätzt.

+0

Die? ist das Parameterersetzungszeichen; Es sollte nur passieren, wenn Sie es in Ihrem Abfragetext und nicht als Parameter verwenden. Bitte ändern Sie Ihre Frage, um ein Beispiel zu geben, was genau Sie tun. – womble

+0

Ja, zeigen Sie uns ein Beispiel für den Code, der das Problem verursacht – Gareth

+0

-1 Fragen müssen geklärt werden. Wenn Sie die SQL über normale Suchmethoden aufrufen, macht Rails einen brillanten Job als Ersatz für die?. Wenn Sie die Werte manuell in die Abfrage eingeben, indem Sie die Zeichenfolge anfügen, könnte dies ein Problem darstellen. Gareth und Womble's Kommentare müssen angesprochen werden. – hyuan

Antwort

0

Hmmmm .. mit CGI escape, ich fand heraus, dass der Charakter im System kommt nicht, was ich erwartet habe, dass es zu sein. Es ist kein Fragezeichen (% 3F), sondern ein Fragezeichen (% D5).

C__%D5__M__P__L__%80___T__%80__ 
C__%3F__M__P__L__%3F___T__%3F__ 

Schließlich gsubbed ich die nicht druckbare Zeichen aus vor dem Speichern.

gsub(/[^[:print:]]/, '') 

Erst nachdem die ungültigen Zeichen in meinen Zeichenfolge zu entfernen, konnte ich richtig um das Element zu speichern. Keine der anderen Lösungen funktionierte, teilweise weil das Problem nicht klar im Voraus verstanden wurde.

0

Können Sie das Fragezeichen mit "\?" Umgehen?

[ '?' "? C__O __ __ P__L__E__T__E"]

Werke:

1

einfach das Fragezeichen in der Zeichenfolge mit einem String ersetzt ein Fragezeichen enthält, habe ich keine andere Art und Weise entweder gefunden perfekt.

0

Ich weiß, das ist viel zu spät, aber ich stieß auf das gleiche Problem, wenn wir versuchten, eine Datei als UTF-8 zu verarbeiten, die tatsächlich die ISO-8859-1-Zeichencodierung verwendet. Ich vermute, Sie hatten ein ähnliches Problem in Ihrem Scraping, wo Sie die falsche Kodierung angenommen haben, und es endete damit, dass Dinge fehlschlagen.

Verwandte Themen