2009-03-22 2 views
-2

Я вставляю текст из очищенного веб-страницы в свою базу данных. некоторые из полей в строке имеют непечатаемые/странные символы. Например,Rails ActiveRecord: Вставка текста, содержащего непечатаемые/странные символы

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

Я знаю, о ч(), strip_tags() ... Sanitize, ... и т.д. и т.п. Но я не хочу, чтобы дезинфицировать это SQL. Activerecord правильно регистрирует SQL, а при запуске в phpMySQL запрос выполняется правильно. что-то происходит между генерацией запросов SQL и выполняемым.

Помощь очень ценится.

+0

The? является символом замещения параметра; это должно произойти только в том случае, если вы используете его в тексте запроса, а не как параметр. Измените свой вопрос, чтобы привести пример того, что вы делаете. – womble

+0

Да, покажите нам пример кода, вызывающего проблему – Gareth

+0

-1 Вопросы нуждаются в разъяснениях. Если вы вызываете SQL с помощью обычных методов поиска, Rails выполняет блестящую работу, заменяя?. Если вы вручную вводите значения в запрос с помощью добавления строки, это может быть проблемой. Необходимо обратить внимание на комментарии Гарета и Жатва. – hyuan

ответ

0

Хмммм .. с помощью CGI-побега, я узнал, что персонаж, входящий в систему, не то, что я ожидал от него. Это не вопросительный знак (% 3F), а вопросительный знак (% D5).

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

В конце концов я gsubbed вне непечатаемые символы перед сохранением.

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

Только после удаления недопустимых символов в моих строках, я смог сохранить элемент правильно. Ни один из других решений не работал, частично потому, что проблема не была четко понята заранее.

0

Можете ли вы избежать вопросительного знака с помощью «\?»?

1

Просто замените знак вопроса в строке со строкой, содержащей знак вопроса, я не нашел ни одного другого пути:

[? ' «? C__O __ __ P__L__E__T__E»,]

работ в совершенстве.

0

Я знаю, что это поздно, но я столкнулся с той же проблемой, когда мы пытались обработать файл как UTF-8, который фактически использовал кодировку символов ISO-8859-1. Я подозреваю, что у вас была аналогичная проблема в ваших выскабливаниях, где вы предполагали неправильную кодировку, и это в конечном итоге привело к сбою.

Смежные вопросы