Tôi gặp sự cố với UTF-8 và mb_strtoupper.PHP: mb_strtoupper không hoạt động
mb_internal_encoding('UTF-8');
$guesstitlestring='Le Courrier de Sáint-Hyácinthe';
$encoding=mb_detect_encoding($guesstitlestring);
if ($encoding!=='UTF-8') $guesstitlestring=mb_convert_encoding($guesstitlestring,'UTF-8',$encoding);
echo "DEBUG1 $guesstitlestring\n";
$guesstitlestring=mb_strtoupper($guesstitlestring);
echo "DEBUG2 $guesstitlestring\n";
Kết quả:
DEBUG1 Le Courrier de Sáint-Hyácinthe
DEBUG2 LE COURRIER DE S?INT-HY?CINTHE
Tôi không hiểu tại sao điều này đang xảy ra? Tôi đang cố gắng cẩn thận như tôi có thể với mã hóa. Chuỗi được đưa ra đầu tiên dưới dạng UTF-8, được xác minh và có thể được chuyển thành UTF-8. Nó là một cơn ác mộng!
CẬP NHẬT
Vì vậy, tôi đã tìm ra rằng đây là do sự kết hợp của bước vào tôi những lập luận thông qua giao diện điều khiển và các đối số quay trở lại ra khỏi console. Vì vậy, họ đã bị cắt xén cả trên đường vào và đường ra. Giải pháp là không nhập bất kỳ đối số nào theo cách này, hoặc lấy các đối số ra theo cách này.
Cảm ơn mọi người đã giúp bạn giải quyết vấn đề này!
Nó được lặp lại với bảng điều khiển, nhưng hiển nhiên nó hiển thị trong bảng điều khiển vì dấu gạch nối có trong DEBUG1. – Alasdair
Mã hóa tệp .php của bạn là gì? Hãy thử chuyển đổi nó thành utf-8 mà không có BOM. – Hast
... mh, hãy thử thêm setlocale (LC_ALL, 'en_US.UTF-8'); ở đầu trang – Federkun