2012-08-22 28 views
5

Tôi có một số vấn đề với hàm PHP mb_detect_encoding. Tôi không thể chuyển đổi thành ISO-8859-1. Bất kỳ giúp đỡ?mb_convert_encoding issues

Code:

$str = "åäö"; 
$encoding = mb_detect_encoding($str); 
echo $encoding; 

$encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1")); 
echo $encoding; 

Output:

UTF-8

UTF-8

Đã cập nhật, giải pháp:

Tôi đã cập nhật mb_detect_order thành mảng ('UTF-8', 'ISO-8859-1') và nó hoạt động.

+0

'mb_detect_order()' của bạn là gì? – Passerby

+0

Cũng có bạn đi. Tôi đã cập nhật mb_detect_order thành UTF-8 ngay từ đầu và nó hoạt động. Cảm ơn! – brasimon

+0

Nếu bạn đã giải quyết được vấn đề của mình, vui lòng đăng câu hỏi đó làm câu trả lời và chấp nhận nó khi bạn có thể. –

Trả lời

-2

tôi cập nhật mb_detect_order để array ('UTF-8', 'tiêu chuẩn ISO-8859-1') và nó làm việc

+0

Bạn đang lừa mình để tin rằng chuyển đổi đã hoạt động. Vì c3a5c3a4c3b6 là một chuỗi byte hợp lệ trong cả hai UTF-8 và ISO-8859-1 (đại diện cho những thứ khác nhau trong hai trường hợp), bạn có thể nhận được mb_detect_order để báo cáo nó dưới dạng mã hóa. – borrible

+0

@borrible Nếu 'mb_internal_encoding' của anh ấy đã được đặt thành UTF-8 thì sao? – Passerby

+0

@Passerby - Nó không phù hợp với những gì chúng ta đang thấy. Nếu chuỗi đã thực sự được chuyển đổi thành ISO-8859-1, nó sẽ trở thành e5e4f6 chuỗi byte. Bây giờ, đó không phải là UTF-8 hợp lệ nên mb_convert_encoding sẽ không báo cáo UTF-8. Tuy nhiên, nếu trình tự đã được để lại dưới dạng c3a5c3a4c3b6 (hợp lệ UTF-8 hoặc ISO-8859-1), chúng tôi sẽ nhận được tình huống được mô tả. – borrible

6

Bạn đã không thực sự chuyển đổi chuỗi của bạn. Thay vào đó, cuộc gọi đến mb_convert_encoding không cho rằng chuỗi ban đầu là UTF-8. Chuỗi trước cuộc gọi là một chuỗi byte có thể đã được ISO-8859-1 (và sẽ có các mục đại diện khác nhau). Bạn có thể thấy trường hợp này xảy ra, thay vì gọi số mb_detect_encoding, sử dụng bin2hex trên chuỗi và xem chuỗi byte sau cuộc gọi chuyển đổi. Bạn sẽ thấy chuỗi byte không thay đổi.

Để chuyển đổi hoạt động, bạn cần phải thông báo (trong trường hợp này) mã hóa ban đầu. Sử dụng:

mb_convert_encoding($str, 'ISO-8859-1','utf-8'); 

Nếu bạn kiểm tra chuỗi byte sau này bạn sẽ thấy chuyển đổi đã diễn ra.

+0

ISO-8859-1 có hoạt động cho chuỗi "không mã hóa" (tức là chuỗi byte không hợp lệ ngẫu nhiên) không? – Pacerier

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