2011-12-21 30 views
6

Tôi nhận được văn bản được mã hóa Windows-1256 từ web và không chuyển đổi nó thành utf-8.PHP Chuyển văn bản được mã hóa Windows-1256 sang UTF-8

Tôi đã thử sử dụng mb_convert_encoding và biểu tượngv nhưng dường như chúng không hoạt động.

không ai trong số họ dường như có khả năng xử lý windows-1256.

Cách thực hiện?

Chỉnh sửa: Thêm chi tiết về lỗi. Khi cố gắng

mb_convert_encoding($text,"utf-8", "windows-1256"); 

tôi nhận được

nhắn: mb_convert_encoding() [function.mb-chuyển đổi mã hóa]: mã hóa ký tự bất hợp pháp theo quy định

Và khi tôi cố gắng

iconv("windows-1256", "utf-8", $text); 

Tôi không nhận được lỗi nhưng nó trả về giá trống gọi

+1

Bạn có thể sao chép/dán chính xác mã bạn đã thử và không hoạt động không? Bạn nhận được một lỗi hoặc bạn chỉ nhận được chuỗi không thay đổi? –

+1

Bạn đã thử CP1256 với biểu tượng() chưa? – Sjoerd

+0

đã cập nhật câu hỏi với các lỗi tôi đang nhận được – applechief

Trả lời

1

Kiểm tra này: http://rayed.com/wordpress/wp-content/upload/lib.utf2win.php.txt

Rõ ràng ông cũng đã có một số vấn đề, bởi vì ông đã viết kịch bản này, nếu bạn có thể đảo ngược đó, nó có thể làm việc.

tôi đảo ngược điều đó cho bạn, hãy thử rằng:

$f[]="\xc2\xac"; $t[]="\x80"; 
$f[]="\xd9\xbe"; $t[]="\x81"; 
$f[]="\xc0\x9a"; $t[]="\x82"; 
$f[]="\xc6\x92"; $t[]="\x83"; 
$f[]="\xc0\x9e"; $t[]="\x84"; 
$f[]="\xc0\xa6"; $t[]="\x85"; 
$f[]="\xc0\xa0"; $t[]="\x86"; 
$f[]="\xc0\xa1"; $t[]="\x87"; 
$f[]="\xcb\x86"; $t[]="\x88"; 
$f[]="\xc0\xb0"; $t[]="\x89"; 
$f[]="\xd9\xb9"; $t[]="\x8a"; 
$f[]="\xc0\xb9"; $t[]="\x8b"; 
$f[]="\xc5\x92"; $t[]="\x8c"; 
$f[]="\xda\x86"; $t[]="\x8d"; 
$f[]="\xda\x98"; $t[]="\x8e"; 
$f[]="\xda\x88"; $t[]="\x8f"; 
$f[]="\xda\xaf"; $t[]="\x90"; 
$f[]="\xc0\x98"; $t[]="\x91"; 
$f[]="\xc0\x99"; $t[]="\x92"; 
$f[]="\xc0\x9c"; $t[]="\x93"; 
$f[]="\xc0\x9d"; $t[]="\x94"; 
$f[]="\xc0\xa2"; $t[]="\x95"; 
$f[]="\xc0\x93"; $t[]="\x96"; 
$f[]="\xc0\x94"; $t[]="\x97"; 
$f[]="\xda\xa9"; $t[]="\x98"; 
$f[]="\xc4\xa2"; $t[]="\x99"; 
$f[]="\xda\x91"; $t[]="\x9a"; 
$f[]="\xc0\xba"; $t[]="\x9b"; 
$f[]="\xc5\x93"; $t[]="\x9c"; 
$f[]="\xc0\x8c"; $t[]="\x9d"; 
$f[]="\xc0\x8d"; $t[]="\x9e"; 
$f[]="\xda\xba"; $t[]="\x9f"; 
$f[]="\xd8\x8c"; $t[]="\xa1"; 
$f[]="\xda\xbe"; $t[]="\xaa"; 
$f[]="\xd8\x9b"; $t[]="\xba"; 
$f[]="\xd8\x9f"; $t[]="\xbf"; 
$f[]="\xdb\x81"; $t[]="\xc0"; 
$f[]="\xd8\xa1"; $t[]="\xc1"; 
$f[]="\xd8\xa2"; $t[]="\xc2"; 
$f[]="\xd8\xa3"; $t[]="\xc3"; 
$f[]="\xd8\xa4"; $t[]="\xc4"; 
$f[]="\xd8\xa5"; $t[]="\xc5"; 
$f[]="\xd8\xa6"; $t[]="\xc6"; 
$f[]="\xd8\xa7"; $t[]="\xc7"; 
$f[]="\xd8\xa8"; $t[]="\xc8"; 
$f[]="\xd8\xa9"; $t[]="\xc9"; 
$f[]="\xd8\xaa"; $t[]="\xca"; 
$f[]="\xd8\xab"; $t[]="\xcb"; 
$f[]="\xd8\xac"; $t[]="\xcc"; 
$f[]="\xd8\xad"; $t[]="\xcd"; 
$f[]="\xd8\xae"; $t[]="\xce"; 
$f[]="\xd8\xaf"; $t[]="\xcf"; 
$f[]="\xd8\xb0"; $t[]="\xd0"; 
$f[]="\xd8\xb1"; $t[]="\xd1"; 
$f[]="\xd8\xb2"; $t[]="\xd2"; 
$f[]="\xd8\xb3"; $t[]="\xd3"; 
$f[]="\xd8\xb4"; $t[]="\xd4"; 
$f[]="\xd8\xb5"; $t[]="\xd5"; 
$f[]="\xd8\xb6"; $t[]="\xd6"; 
$f[]="\xd8\xb7"; $t[]="\xd8"; 
$f[]="\xd8\xb8"; $t[]="\xd9"; 
$f[]="\xd8\xb9"; $t[]="\xda"; 
$f[]="\xd8\xba"; $t[]="\xdb"; 
$f[]="\xd9\x80"; $t[]="\xdc"; 
$f[]="\xd9\x81"; $t[]="\xdd"; 
$f[]="\xd9\x82"; $t[]="\xde"; 
$f[]="\xd9\x83"; $t[]="\xdf"; 
$f[]="\xd9\x84"; $t[]="\xe1"; 
$f[]="\xd9\x85"; $t[]="\xe3"; 
$f[]="\xd9\x86"; $t[]="\xe4"; 
$f[]="\xd9\x87"; $t[]="\xe5"; 
$f[]="\xd9\x88"; $t[]="\xe6"; 
$f[]="\xd9\x89"; $t[]="\xec"; 
$f[]="\xd9\x8a"; $t[]="\xed"; 
$f[]="\xd9\x8b"; $t[]="\xf0"; 
$f[]="\xd9\x8c"; $t[]="\xf1"; 
$f[]="\xd9\x8d"; $t[]="\xf2"; 
$f[]="\xd9\x8e"; $t[]="\xf3"; 
$f[]="\xd9\x8f"; $t[]="\xf5"; 
$f[]="\xd9\x90"; $t[]="\xf6"; 
$f[]="\xd9\x91"; $t[]="\xf8"; 
$f[]="\xd9\x92"; $t[]="\xfa"; 
$f[]="\xc0\x8e"; $t[]="\xfd"; 
$f[]="\xc0\x8f"; $t[]="\xfe"; 
$f[]="\xdb\x92"; $t[]="\xff"; 

function win_to_utf8($str) { 
    global $f, $t; 
    return str_replace($t, $f, $str); 
} 
+0

Tôi đã không kiểm tra nó, nhưng làm thế nào hiệu quả nó sẽ được cho các văn bản lớn? – applechief

+1

Tôi nghi ngờ nó sẽ kém hiệu quả hơn nhiều so với mb_convert hoặc iconv. Làm cách nào để khôi phục các chức năng đó?Có lẽ ở cấp độ thấp hơn, nhưng vẫn còn, bạn cần phải thay thế những nhân vật đó. Và dù sao, tại sao không cho nó đi và xem nó như thế nào. Như đã nói, không phải mã của tôi nên tôi tò mò. –

9

Cố

echo iconv('WINDOWS-1256', 'UTF-8', 'testÍÊ'); 

... trên http://writecodeonline.com/php/ dường như làm việc một cách chính xác (sản xuất thử nghiệm أچأٹ)

+0

Vì văn bản bạn nhập không giành được mã hóa 1256 tôi đoán. – applechief

+1

Hai ký tự cuối cùng "ÍÊ" phải khớp với các ký tự Windows-1256. Xem http://en.wikipedia.org/wiki/Windows-1256. Đó là lý do tại sao tôi nhận được ký tự arabic trong đầu ra. –

4

Hãy thử điều này, nên hoạt động:

iconv("windows-1256", "utf-8//TRANSLIT//IGNORE", $text)

+0

Cải thiện hình thức sử dụng mã vạch của bạn – Yamaneko

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