2008-09-30 34 views
56

Tôi có trang chứa biểu mẫu. Trang này được phục vụ với văn bản kiểu nội dung/html; charset = utf-8. Tôi cần gửi biểu mẫu này tới máy chủ bằng cách sử dụng mã hóa ký tự ISO-8859-1. Điều này có thể thực hiện được với Internet Explorer không?Đặt mã hóa ký tự trong gửi biểu mẫu cho Internet Explorer

Đặt thuộc tính accept-charset thành phần tử biểu mẫu, như thế này, hoạt động cho Firefox, Opera, v.v. nhưng không dành cho IE.

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

Edit: Hình thức này được tạo ra bởi máy chủ A và sẽ được trình lên máy chủ B. Tôi không có quyền kiểm soát máy chủ B.

Nếu tôi đặt máy chủ A đến phục vụ nội dung với charset ISO-8859- 1 tất cả mọi thứ hoạt động, nhưng tôi đang tìm cách để thực hiện công việc này mà không cần thay đổi mã hóa của máy chủ A. Tôi có một câu hỏi khác about setting the encoding in server A.

Trả lời

0

Tôi khá chắc chắn rằng không thể thực hiện được với các phiên bản cũ hơn của IE. Trước khi thuộc tính accept-charset được tạo ra, không có cách nào cho các phần tử form xác định mã hóa ký tự nào được chấp nhận và tốt nhất mà trình duyệt có thể thực hiện là giả sử mã hóa của trang mà biểu mẫu sẽ thực hiện. Có một chút buồn khi bạn cần biết mã hóa nào đã được sử dụng - ngày nay chúng tôi mong đợi các khung công tác web của chúng tôi sẽ xử lý các chi tiết đó một cách vô hình và hiển thị dữ liệu văn bản cho ứng dụng dưới dạng chuỗi Unicode, đã được giải mã ..

0

Có vẻ như Microsoft biết accept-charset, nhưng tài liệu của họ không cho biết phiên bản nào bắt đầu hoạt động ...
Bạn không biết phiên bản trình duyệt nào bạn đã thử nghiệm.

0

Tôi có vẻ nhớ rằng Internet Explorer bị nhầm lẫn nếu mã hóa bộ ký tự chấp nhận không khớp với mã hóa được chỉ định trong tiêu đề loại nội dung. Trong ví dụ của bạn, bạn yêu cầu tài liệu được gửi dưới dạng UTF-8, nhưng muốn gửi biểu mẫu trong ISO-8859-1. Hãy thử kết hợp chúng và xem liệu nó có giải quyết được vấn đề của bạn hay không.

+0

Tôi gặp vấn đề tương tự. Ứng dụng phục vụ phản hồi là utf-8 và trong biểu mẫu nó được chỉ định accept-charset = "utf-8" nhưng với IE8 nó lấy các giá trị có định dạng sai. Cấu hình tốt nhất để làm việc với biểu mẫu với Internet Explorer là gì? Cảm ơn. –

2

Nếu bạn có bất kỳ quyền truy cập nào vào máy chủ, hãy chuyển đổi quá trình xử lý thành UTF-8. Nghệ thuật nộp các mẫu không phải UTF-8 là một câu chuyện dài và xin lỗi; điều này document about forms and i18n có thể được quan tâm. Tôi hiểu bạn dường như không quan tâm đến hỗ trợ quốc tế; bạn luôn có thể chuyển đổi dữ liệu UTF-8 thành các thực thể html để đảm bảo nó vẫn là Latin-1.

+1

Tôi rất quan tâm đến hỗ trợ quốc tế và tôi muốn giữ ứng dụng của mình ở thế giới UTF-8, nhưng trang đơn này cần phải được gửi trong iso-8859-1 đến máy chủ bên ngoài. –

6

Dường như điều này không thể thực hiện được, không ít nhất với các phiên bản hiện tại của IE (6 và 7).

IE hỗ trợ biểu mẫu chấp nhận thuộc tính biểu mẫu, nhưng chỉ khi giá trị của nó là 'utf-8'.

Giải pháp là sửa đổi máy chủ A để tạo mã hóa 'ISO-8859-1' cho trang chứa biểu mẫu.

+2

IE chỉ sử dụng 'bộ ký tự chấp nhận 'làm' bản sao lưu ', khi nó không mã hóa được một trường trong bộ ký tự riêng của trang. Chỉ định 'accept-charset' và bạn sẽ không thể biết mã hóa nào được sử dụng. Do đó, hoàn toàn vô dụng; nó không bao giờ nên được sử dụng. Giải pháp duy nhất là, thực sự, để thay đổi bộ ký tự của trang (hoặc khung nội tuyến) chứa biểu mẫu. – bobince

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

Có một hack đơn giản thế này:

Chèn một trường nhập ẩn dưới hình thức với một thực thể mà chỉ xảy ra ở các ký tự đặt máy chủ gửi bài của bạn (hoặc làm một GET) để chấp nhận.

Ví dụ: Nếu hình thức tọa lạc trên một máy chủ phục vụ theo tiêu chuẩn ISO-8859-1 và biểu mẫu sẽ gửi đến một máy chủ mong UTF-8 chèn một cái gì đó như thế này trong các hình thức:

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

IE sẽ sau đó "phát hiện" biểu mẫu chứa ký tự UTF-8 và sử dụng UTF-8 khi bạn POST hoặc GET. Lạ, nhưng nó hoạt động.

+6

Điều này dường như không hoạt động đối với tình huống nghịch đảo. Đăng biểu mẫu nằm trên trang utf-8 tới trang iso-8859-1 trên máy chủ khác. – MaxiWheat

+1

Phải, nó sẽ không hoạt động theo cách khác. Wenn bạn chỉ định một cái gì đó như "ÿ" là Char "cao nhất" trong bộ ký tự ISO-8859-1, điều này rõ ràng là một mã UTF-8, quá. Vì vậy, IE do đó nghĩ rằng đó là UTF-8. Vì vậy, nó chỉ hoạt động khi bộ ký tự đích có số lượng ký tự lớn hơn. – acme

+0

điều này giải quyết được vấn đề của tôi khi IE8 và IE9 không tôn trọng accept-charset = 'utf-8', cảm ơn! –

1

Chỉ gặp vấn đề tương tự và tôi có một giải pháp tương đối đơn giản mà không yêu cầu bất kỳ thay đổi nào trong mã hóa ký tự trang (đó là một cơn đau ở mông).

Ví dụ: trang web của bạn ở dạng utf-8 và bạn muốn đăng biểu mẫu lên trang web trong iso-8859-1. Chỉ cần thay đổi hành động của bài đăng thành một trang trên trang web của bạn sẽ chuyển đổi các giá trị được đăng từ utf-8 thành iso-8859-1.

này có thể được thực hiện dễ dàng trong php với một cái gì đó như thế này:

<?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 
?> 
+1

Đó là một ý tưởng tốt, nhưng điều này có thể khá phức tạp nếu bạn đang cố gắng gửi thông tin đăng nhập và cần xử lý cookie và nội dung. Điều này có thể được thực hiện với CURL sau đó, nhưng nó thực sự là một nỗi đau để làm cho nó hoạt động. – acme

5

Tôi đã có cùng một vấn đề ở đây. Tôi có một trang UTF-8 cần phải đăng lên máy chủ ISO-8859-1.

Có vẻ như IE không thể xử lý ISO-8859-1. Nhưng nó có thể xử lý ISO-8859- .

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

Vì vậy, điều này làm việc cho tôi, vì ISO-8859-1 và ISO-8859-15 gần như giống nhau.

+0

Không. Nó không hiệu quả với tôi. – hrzafer

+0

không thể xác nhận rằng đối với IE 11… – Beat

1

Đối với những biểu tượng Nga 'cửa sổ-1251'

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

Khi chỉ đơn giản là chuyển đổi chuỗi để CP1251

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

Mặc dù bản thân điều này không trả lời câu hỏi này, tôi nghĩ đây là giải pháp tốt hơn nhiều. Bạn nên luôn luôn làm việc với UTF-8. Điều này đang được nói, nếu bạn tạo một biểu mẫu được gửi đến một máy chủ mà bạn không có quyền kiểm soát, nó sẽ không hoạt động theo cách này. –

30

Với trình duyệt phong nha:

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

Với IE (bất kỳ):

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

Điều này dường như giải quyết vấn đề IE (khi JavaScript được kích hoạt trong trình duyệt), và bạn có thể thực hiện nó bằng cách sử dụng thuộc tính 'onsubmit =" document.charset = 'ISO-8859-1' "' trong thẻ 'form' . –

+0

Tiêu đề 'Accept-Charset' được sử dụng để thông báo cho máy chủ biết ký tự nào có thể chấp nhận là phản hồi (xem http://tools.ietf.org/html/rfc2616#section-14.2). Dường như với tôi rằng đây không phải là cách chính xác để xác định bộ ký tự của tài liệu được gửi. Theo tiêu chuẩn, điều này nên được thêm dưới dạng tham số 'charset' vào loại nội dung. Bạn không chắc chắn cách chỉ định điều này trong biểu mẫu HTML mặc dù: \ – exhuma

+0

Sau khi tìm hiểu thêm một chút, tôi đã xem [enctype] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form # attr-enctype) thuộc tính trên phần tử biểu mẫu. Theo mô tả, điều này có vẻ chính xác hơn. Chưa thử nghiệm nó. – exhuma

Các vấn đề liên quan