Chỉ cần để ghi lại - câu hỏi đầu tiên của tôi ở đây nhưng hy vọng không phải đầu vào cuối cùng của tôi trong cộng đồng. Nhưng đó không phải là lý do tôi ở đây.Làm việc với GD (imagettftext()) và UTF-8 ký tự
Tôi hiện đang phát triển một hệ thống đơn giản để tạo hình ảnh có văn bản trên đó. Everthing diễn ra tốt đẹp cho đến khi tôi nhận ra rằng GD không thể xử lý UTF-8 ký tự như
A, C, Z, A, O, é
và vân vân.
Để xóa mọi thứ lên - Tôi đang sử dụng imagettftext()
Đang cố gắng để giải quyết vấn đề của tôi, tôi đào vào sâu của google và một số giải pháp đã được trả lời, không ai trong số họ, thật đáng buồn, giải quyết vấn đề của tôi hoàn toàn. Hiện nay tôi đang sử dụng kịch bản này tôi tìm thấy trong chủ đề này - PHP function imagettftext() and unicode
private function properText($text){
// Convert UTF-8 string to HTML entities
$text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
// Convert HTML entities into ISO-8859-1
$text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
// Convert characters > 127 into their hexidecimal equivalents
$out = "";
for($i = 0; $i < strlen($text); $i++) {
$letter = $text[$i];
$num = ord($letter);
if($num>127) {
$out .= "&#$num;";
} else {
$out .= $letter;
}
}
return $out;
}
và nó hoạt động tốt đối với một số nhân vật nhưng không phải tất cả trong số họ, ví dụ, một với âm sắc không được chuyển đổi một cách chính xác.
Vì vậy, tại thời điểm này tôi không chắc chắn nơi và những gì để tìm kiếm nữa vì tôi không thể dự đoán đầu vào của người dùng. Để chính xác hơn, hệ thống sẽ lấy tên nghệ sĩ từ nguồn cấp dữ liệu xml và sử dụng dữ liệu để tạo hình ảnh (tôi không có kế hoạch hỗ trợ chữ tượng hình).
Tôi đã đảm bảo rằng dữ liệu được thu thập từ nguồn cấp dữ liệu thực sự là UTF-8 bằng cách sử dụng mb_detect_encoding() của PHP và tôi đã đảm bảo rằng tất cả các ký tự hiện không được hiển thị chính xác được thêm vào tệp phông chữ tôi ' m cho hàm imagettftext() bằng cách kiểm tra bằng công cụ charmap.
Hy vọng rằng tôi có thể tìm thấy câu trả lời của tôi ở đây và cảm ơn sự giúp đỡ của bạn trước!
chỉnh sửa
Để làm rõ - các nhân vật không được hiển thị một cách chính xác, hoặc, chính xác hơn, được thay thế bằng các nhân vật bị thay đổi. Đây là một ảnh chụp màn hình -
nó nên đọc "José González"
chỉnh sửa số 2
Sử dụng BIN2HEX() chức năng trên dữ liệu lấy từ lợi nhuận feed xml này.
José González -> 4a6f73c3a920476f6e7ac3a16c657a
// input -> bin2hex(input)
chỉnh sửa - cố định
Như tôi đã tiếp tục nghiên cứu của tôi, tôi đã đưa ra một câu trả lời cho vấn đề của tôi, đoạn mã này làm được rồi!
$text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");
$text = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$text);
return($text);
Bây giờ tất cả các ký tự gặp rắc rối tôi đều được hiển thị chính xác!
Điều gì không hoạt động chính xác? Làm thế nào là đầu ra không phải là những gì bạn mong đợi? Bạn đang sử dụng phông chữ có chứa các ký tự bạn muốn? Tôi đang sử dụng 'imagegettftext' với tiếng Nhật, vì vậy ký tự Unicode không phải là vấn đề chung. – deceze
Có, như tôi đã nói trong bài đăng gốc _Tôi đã đảm bảo rằng tất cả các ký tự hiện không được hiển thị chính xác được ghi trong tệp font_. Điều đó làm việc là đầu ra - các ký tự không được hiển thị chính xác, hoặc, để chính xác hơn, được thay thế bằng các ký tự không đúng định dạng. Đây là một ảnh chụp màn hình - http://imgur.com/B8RHa - nó nên đọc "José González" – Pankucins
Lỗi bạn nhận được ở đó: http://i.imgur.com/B8RHa.jpg chắc chắn là một vấn đề mã hóa, như in ấn một số UTF-8 caracters trong ANSI. – darma