2011-02-04 42 views
5

Trong trang web của tôi có một biểu mẫu với một vùng văn bản đơn giản để mọi người đăng nhận xét. Vấn đề là đôi khi tôi nhận được thông tin trong uft8 và đôi khi trong iso. Có thể kiểm soát điều đó không?biểu mẫu php gửi utf8?

Có thể tôi đang làm điều gì đó sai, nhưng có thể trình duyệt thay đổi cách mã hóa dữ liệu mà nó gửi không?

nhờ

+0

trùng lặp có thể xảy ra [Làm thế nào để bạn biết những gì mã hóa người dùng là inputing vào trình duyệt?] (Http: // stackoverflow .com/questions/4559564/how-do-you-know-what-encoding-người dùng-đang-nhập-vào-trình duyệt) –

Trả lời

16

Nếu bạn muốn chắc chắn về những gì bộ ký tự bạn đang chấp nhận, thiết lập nó ở dạng bạn

<form method="post" action="/your/url/" accept-charset="UTF-8"> 
</form> 

Bạn có thể xem tất cả các nhân vật có thể chấp nhận đặt ở đây: Character Sets

+0

yêu thích điều này, nhưng có đúng là nó không hoạt động trên IE không? –

+1

Tôi tin rằng điều ngược lại không hiệu quả. Nếu tôi nhớ chính xác IE sẽ tôn trọng UTF-8, nhưng nếu bạn đặt bộ ký tự của bạn thành ISO thì nó sẽ thất bại. Điều này chỉ được tính trong các phiên bản mới. Bạn cũng có thể đặt bộ ký tự của trang là ayush được đề cập để chắc chắn là tốt. –

3

bạn luôn có thể buộc UTF-8. Sau đó, bạn có thể gửi, nhận và lưu trữ dữ liệu trong quảng cáo UTF-8 bao gồm hầu hết các ngôn ngữ của con người mà không phải thay đổi bộ ký tự.

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/> 
+0

cảm ơn, tôi cũng sẽ thêm cái này nữa, nhưng ... là nó utf-81 hay utf-8? –

+0

Đó là utf-8. Không có utf-81. – Michael

-1

Bạn đã thử nghiệm với nhiều trình duyệt khác nhau nếu sự xuất hiện xảy ra trên tất cả/một số hoặc chỉ có IE?

+0

hầu hết các sự cố của chúng tôi chỉ xuất hiện trên IE ... –

-3

Bạn có thể mã hóa dữ liệu $ _POST thành UTF-8 bằng chức năng utf8_encode của PHP.

Cái gì như:

$_POST['comments'] = utf8_encode($_POST['comments']); 
+0

điều này sẽ mã hóa hai nội dung đã được gửi dưới dạng utf-8. – cweiske

+0

Urgh. Thật. Nếu bạn muốn sử dụng PHP để mã hóa, sau đó điều này (http://stackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8) có thể giúp ... mặc dù phát hiện mã hóa là rất phức tạp. – voidstate

0

nhưng ... kiểm tra trước khi mã hóa, nếu chuỗi là đã utf8 khác mà bạn double-encode nó

function str_to_utf8 ($string) { 

    if (mb_detect_encoding($string, 'UTF-8', true) === false) { 
     $string = utf8_encode($string); 
    } 

    return $str; 
} 

hoặc sử dụng

$string = utf8_encode(utf8_decode($string)); 

do đó bạn không mã hóa kép một chuỗi

0

tôi giải quyết vấn đề này bằng cách thay đổi mbstring.http_input = vượt qua trong file php.ini của tôi