2009-03-22 4 views
-2

나는 긁은 웹의 일부 텍스트를 데이터베이스에 삽입하고 있습니다. 문자열의 일부 필드에는 인쇄 할 수없는/이상한 문자가 있습니다. 예를 들어,레일 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() ... 살균, ... 등 등 시간에 대해 알고하지만이 SQL을 소독하고 싶지 않아요. activerecord는 SQL을 올바르게 기록하고 phpMySQL에서 실행하면 쿼리가 올바르게 실행됩니다. SQL 쿼리 생성과 실행 중 어떤 일이 발생합니다.

도움을 많이 받으실 수 있습니다.

+0

? 매개 변수 대체 문자입니다. 매개 변수가 아닌 쿼리 텍스트에서 사용하는 경우에만 발생해야합니다. 자신이하는 일의 예를 들어주기 위해 질문을 수정하십시오. – womble

+0

예, 문제의 원인이되는 코드의 예를 표시하십시오. – Gareth

+0

-1 질문에 대한 설명이 필요합니다. 일반적인 find 메소드를 통해 SQL을 호출하는 경우 Rails는?를 대체하는 훌륭한 작업을 수행합니다. 문자열 append를 사용하여 값을 수동으로 삽입하는 경우이 문제가 발생할 수 있습니다. Gareth와 womble의 의견을 언급해야합니다. – 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

"\?"를 사용하여 물음표를 벗어날 수 있습니까?

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

작품 :

1

그냥 물음표를 포함하는 문자열과 문자열의 물음표를 교체, 나는 다른 방법 중 하나를 발견하지 않았습니다 아주.

0

필자는이 방법이 늦다는 것을 알고 있지만 실제로 ISO-8859-1 문자 인코딩을 사용하는 UTF-8로 파일을 처리하려고 할 때 같은 문제가 발생했습니다. 나는 당신이 잘못된 인코딩을 가정 한 당신의 근근이 살아가는 것과 비슷한 문제가 있다고 의심합니다. 그리고 그것은 결국 실패하게 만듭니다.