Tôi gặp một số vấn đề khi sử dụng PHP để chuyển đổi nội dung cơ sở dữ liệu ISO-8859-1 thành UTF-8. Tôi đang chạy đoạn mã sau để kiểm tra:PHP: Sự cố khi chuyển đổi ký tự "’ "từ ISO-8859-1 sang UTF-8
// Connect to a latin1 charset database
// and retrieve "Georgia O’Keeffe", which contains a "’" character
$connection = mysql_connect('*****', '*****', '*****');
mysql_select_db('*****', $connection);
mysql_set_charset('latin1', $connection);
$result = mysql_query('SELECT notes FROM categories WHERE id = 16', $connection);
$latin1Str = mysql_result($result, 0);
$latin1Str = substr($latin1Str, strpos($latin1Str, 'Georgia'), 16);
// Try to convert it to UTF-8
$utf8Str = iconv('ISO-8859-1', 'UTF-8', $latin1Str);
// Output both
var_dump($latin1Str);
var_dump($utf8Str);
Khi tôi chạy này theo quan điểm nguồn của Firefox, đảm bảo thiết lập mã hóa của Firefox được thiết lập để "phương Tây (ISO-8859-1)", tôi có được điều này:
Cho đến giờ, rất tốt. Đầu ra đầu tiên chứa câu trích dẫn kỳ lạ đó và tôi có thể thấy nó chính xác vì nó ở ISO-8859-1 và Firefox cũng vậy.
Sau khi tôi thay đổi mã hóa của Firefox thiết lập để "UTF-8", nó trông như thế này:
đâu báo giá đi? Không phải là iconv()
phải chuyển đổi sang UTF-8?
Wow, tôi đã làm điều đó và tôi thấy U + 2019 trong UTF-8 chế độ! Nhưng có an toàn khi sử dụng "windows-1252" để chuyển đổi một lượng lớn dữ liệu từ "ISO-8859-1" sang "UTF-8" không? Nói cách khác, tất cả các ký tự ISO-8859-1 vẫn chuyển đổi chính xác? – mattalxndr
Các ký tự 0x80-0x9F sẽ không chuyển đổi chính xác. Nhưng đây là những nhân vật điều khiển mà hầu như không bao giờ được sử dụng. – dan04
@mattalexx Nếu bạn kiểm tra chuỗi ký tự trong phạm vi đó và tìm thấy bất kỳ, đó là một cược tốt rằng chuỗi được mã hóa trong Windows-1252. Nếu bạn không ** tìm thấy bất kỳ ký tự nào trong phạm vi đó, có nhiều khả năng là ISO-8859-1. –