Mặc dù nghe có vẻ thực sự kỳ lạ khi dữ liệu mysql của bạn được xuất chính xác khi chuỗi php bị lỗi khi mã hóa, nhưng cách tôi sẽ cố gắng giải quyết vấn đề của bạn là chia vấn đề thành các bước cố gắng xác định nơi tạo ra mã sai này!
Trước hết, bạn nên thử đặt default_charset
của mình thành utf-8
trong tệp php.ini, được thực hiện như sau:
default_charset = "utf-8";
Nếu bạn không thể làm điều đó do các hạn chế của nhà cung cấp, bạn vẫn có thể thay đổi giá trị trong thời gian chạy bằng cách sử dụng ini_set chức năng!
Bạn cũng sẽ muốn đảm bảo rằng máy chủ web cũng được đặt để xuất ra các tệp được mã hóa utf-8! Trong Apache, điều này có thể được thực hiện cả trong httpd.conf hoặc sử dụng tệp htaccess:
AddDefaultCharset UTF-8
Tại thời điểm này nếu mọi thứ không thành công, vẫn ... hãy thử sử dụng tiêu đề php và bộ mã html tương đối:
<?php header("content-type: text/html;charset=utf-8") ?>
<!doctype>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php echo "α β γ δ ε ϝ ϛ ζ η θ ι κ λ μ ν ξ ο π ϟ ϙ ρ σ τ υ φ χ ψ ω ϡ" ?>
</body>
</html>
Mặc dù vậy, điều rất quan trọng là các tệp của bạn cũng được lưu bằng cách sử dụng mã hóa thích hợp (utf-8 hầu như luôn là lựa chọn tốt hơn, nó giúp ngăn chặn các vấn đề khá nhiều). Nếu bạn đã lưu các tệp có mã hóa khác với utf-8, hãy hủy chúng và tạo các tệp mới từ nội dung cũ của chúng. Đôi khi các trình chỉnh sửa không thực sự có thể chuyển đổi mã hóa đúng cách sau khi tệp được tạo, mặc dù notepad ++ thường làm tốt điều đó; chỉ cần sử dụng converto to
không phải mã hóa encode in
tính năng!
Nếu nó vẫn không hoạt động, mặc dù tôi hy vọng nó đã hoạt động ngay bây giờ, bạn có thể kiểm tra một số lựa chọn thay thế php khác như mb_detect_encoding , mb_convert_encoding , htmlentities và htmlspecialchars để khắc phục sự cố!