Programing

Internet Explorer 용 양식 제출에서 문자 인코딩 설정

lottogame 2020. 12. 9. 07:40
반응형

Internet Explorer 용 양식 제출에서 문자 인코딩 설정


양식이 포함 된 페이지가 있습니다. 이 페이지는 text / html; charset = utf-8 콘텐츠 유형으로 제공됩니다. ISO-8859-1 문자 인코딩을 사용하여이 양식을 서버에 제출해야합니다. Internet Explorer에서 가능합니까?

이와 같이 구성 요소에 accept-charset 속성을 설정하면 Firefox, Opera 등에서는 작동하지만 IE에서는 작동하지 않습니다.

<form accept-charset="ISO-8859-1">
  ...
</form>

편집 :이 양식은 서버 A에서 작성하고 서버 B에 제출됩니다. 서버 B를 제어 할 수 없습니다.

charset ISO-8859-1로 콘텐츠를 제공하도록 서버 A를 설정하면 모든 것이 작동하지만 서버 A의 인코딩을 변경하지 않고이 작업을 수행 할 수있는 방법을 찾고 있습니다. 서버 A의 인코딩 설정에 대한 또 다른 질문이 있습니다 .


이것에 대한 간단한 해킹이 있습니다.

게시 (또는 GET 수행)가 허용하는 서버의 문자 집합에서만 발생하는 엔티티가있는 양식에 숨겨진 입력 필드를 삽입하십시오.

예 : 양식이 ISO-8859-1을 제공하는 서버에 있고 양식이 UTF-8을 예상하는 서버에 게시되는 경우 다음과 같은 양식을 삽입합니다.

<input name="iehack" type="hidden" value="&#9760;" />

그러면 IE는 양식에 UTF-8 문자가 포함되어 있음을 "감지"하고 POST 또는 GET시 UTF-8을 사용합니다. 이상하지만 작동합니다.


괜찮은 브라우저 :

<form accept-charset="ISO-8859-1" .... >

IE (모든) :

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!

적어도 현재 버전의 IE (6 및 7)에서는이 작업을 수행 할 수없는 것 같습니다.

IE는 양식 속성 accept-charset을 지원하지만 그 값이 'utf-8'인 경우에만 가능합니다.

해결책은 양식이 포함 된 페이지에 대한 인코딩 'ISO-8859-1'을 생성하도록 서버 A를 수정하는 것입니다.


여기에도 같은 문제가 있습니다. ISO-8859-1 서버에 게시해야하는 UTF-8 페이지가 있습니다.

IE가 ISO-8859-1을 처리 할 수없는 것 같습니다. 그러나 그것은 ISO-8859- 처리 할 수 있습니다 (15) .

<form accept-charset="ISO-8859-15">
  ...
</form>

그래서 이것은 ISO-8859-1과 ISO-8859-15가 거의 동일하기 때문에 저에게 효과적이었습니다.


서버에 대한 액세스 권한이있는 경우 처리를 UTF-8로 변환하십시오. 비 UTF-8 양식을 제출하는 기술은 길고 유감스러운 이야기입니다. 양식 및 i18n에 대한문서 가 흥미로울 수 있습니다. 국제적 지원에 관심이없는 것 같습니다. 항상 UTF-8 데이터를 html 엔티티로 변환하여 Latin-1을 유지할 수 있습니다.


방금 같은 문제가 발생했으며 페이지 문자 인코딩을 변경할 필요가없는 비교적 간단한 솔루션이 있습니다 (엉덩이가 아파요).

예를 들어 사이트가 utf-8에 있고 iso-8859-1의 사이트에 양식을 게시하려고합니다. 게시 된 값을 utf-8에서 iso-8859-1로 변환하는 사이트의 페이지로 게시물의 동작을 변경하십시오.

이것은 다음과 같이 PHP에서 쉽게 수행 할 수 있습니다.

<?php
$params = array();
foreach($_POST as $key=>$value) {
    $params[] = $key."=".rawurlencode(utf8_decode($value));
}
$params = implode("&",$params);

//then you redirect to the final page in iso-8859-1
?>

러시아 기호 'windows-1251'의 경우

<form action="yourProcessPage.php" method="POST" accept-charset="utf-8">
<input name="string" value="string" />
...
</form>

단순히 문자열을 cp1251로 변환 할 때

$string = $_POST['string'];
$string = mb_convert_encoding($string, "CP1251", "UTF-8");

이전 버전의 IE에서는 불가능할 것이라고 확신합니다. accept-charset속성이 고안 되기 전에는 form요소가 허용 한 문자 인코딩을 지정할 방법이 없었으며 브라우저가 할 수있는 최선은 양식이있는 페이지의 인코딩이 수행 할 것이라고 가정하는 것입니다.

It is a bit sad that you need to know which encoding was used -- nowadays we would expect our web frameworks to take care of such details invisibly and expose the text data to the application as Unicode strings, already decoded...


Looks like Microsoft knows accept-charset, but their doc doesn't tell for which version it starts to work...
You don't tell either in which versions of browser you tested it.


I seem to remember that Internet Explorer gets confused if the accept-charset encoding doesn't match the encoding specified in the content-type header. In your example, you claim the document is sent as UTF-8, but want form submits in ISO-8859-1. Try matching those and see if that solves your problem.


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

참고URL : https://stackoverflow.com/questions/153527/setting-the-character-encoding-in-form-submit-for-internet-explorer

반응형