Ruby on Rails 3 (현재 베타 4 사용)에서 form_tag
또는 form_for
헬퍼 를 사용할 때 _snowman
값이 ☃ ( Unicode) 인 숨겨진 필드가 있음을 알 수 있습니다. \ x9731) 인 나타납니다.
그래서이게 뭐야?
Ruby on Rails 3 (현재 베타 4 사용)에서 form_tag
또는 form_for
헬퍼 를 사용할 때 _snowman
값이 ☃ ( Unicode) 인 숨겨진 필드가 있음을 알 수 있습니다. \ x9731) 인 나타납니다.
그래서이게 뭐야?
답변:
Internet Explorer (5, 6, 7 및 8)가 해당 매개 변수를 유니 코드로 인코딩하도록하기 위해이 매개 변수가 양식에 추가되었습니다 .
특히, 사용자가 브라우저의 인코딩을 Latin-1로 전환하면이 버그가 발생할 수 있습니다. 사용자가 왜 그렇게 미치게 행동하기로 결정했는지 이해하려면 이 Google 검색을 확인하십시오 . 사용자가 웹 사이트를 라틴 -1 모드로 설정 한 후 라틴 -1과 유니 코드로 이해 될 수있는 문자 (예 : é 또는 ç, 이름에서 공통)를 사용하는 경우 Internet Explorer는 라틴어로 인코딩합니다. -1.
이는 사용자가 "Ché Guevara"를 검색하면 서버 측에서 잘못 통과 함을 의미합니다. Ruby 1.9에서는 텍스트가 필연적으로 정규 표현식 엔진으로 들어갈 때 인코딩 오류가 발생합니다. Ruby 1.8에서는 사용자에게 결과가 깨집니다.
IE에서 유니 코드 문자로만 이해할 수있는 매개 변수를 만들면 IE는 accept-charset 특성을보고 강제로 인코딩하여 모든 문자를 UTF-8로 인코딩하도록 지시합니다. 라틴어 -1.
Ruby 1.8에서는 라틴 -1 데이터를 UTF-8 데이터베이스로 가져 오는 것이 매우 사소한 일임을 명심하십시오 ( 전체 스택에서 사용자가 어떤 시점에서 보냈던 바이트가 유효한 UTF-8 문자인지 검사 하지 않기 때문에 ). 결과적으로 Ruby 응용 프로그램 (및 PHP 응용 프로그램 등)이이 사용자 관련 버그를 나타내는 것이 매우 일반적이므로 사용자는 완화 조치로 인코딩을 변경하려고 시도하는 것이 매우 일반적입니다.
이 패치를 작성할 때 매개 변수의 이름이 사용자가있는 장소 (검색 양식과 같은 GET 조치를 사용하는 양식과 관련됨)에 나타날 것임을 알지 못했습니다. 그렇게하기 때문에이 매개 변수의 이름을로 바꾸고 _e
더 무해한 유니 코드 문자를 사용합니다.
이것은 Internet Explorer 5를 지원 하고 양식에 UTF-8 을 사용하도록 권장합니다 .
여기에 표시된 커밋 메시지 는 다음과 같이 자세히 설명합니다.
몇 가지 알려진 웹 인코딩 문제를 해결하십시오.
- 모든 양식에 accept-charset을 지정하십시오. IE5 +뿐만 아니라 모든 최신 브라우저는 양식 매개 변수에 지정된 인코딩을 사용합니다.
- 불행히도 IE5 +는 폼의 값에서 적어도 하나의 문자가 페이지의 문자 집합에 있지 않으면 accept- 문자 집합을 보지 않습니다. 사용자가 기본값을 무시할 수 있기 때문에
문자 세트 (Rails가 UTF-8로 설정)를 유니 코드 문자를 포함하는 숨겨진 입력을 제공하여 IE가 accept-charset을 보도록합니다.- 이제 대부분의 웹 입력이 UTF-8이므로 인바운드 매개 변수를 UTF-8로 설정했습니다. 이것은 ASCII-8BIT와
UTF-8 사이에 호환되지 않는 인코딩의 많은 경우를 제거 합니다.- params [: _ snowman]를 안전하게 무시할 수 있습니다
즉,이 매개 변수를 무시해도됩니다.
여전히 Internet Explorer 5와 같은 오래된 기술을 지원하는 이유는 확실하지 않습니다. 요청하면 Ruby on Rails가 아닌 결정처럼 보입니다.