Vấn đề của bạn liên quan đến mã hóa bộ ký tự của bạn. Điều quan trọng là toàn bộ của bạn mã có cùng bộ ký tự để tránh các vấn đề trong đó các ký tự hiển thị không chính xác.
Có khá nhiều cài đặt cần được xác định đúng và tôi thực sự khuyên bạn nên sử dụng UTF-8, vì nó có hầu hết các chữ cái bạn cần (tiếng Scandinavi, tiếng Hy Lạp, tiếng Ả Rập, tiếng Nga, v.v.).
Dưới đây là một danh sách nhỏ về những thứ phải được đặt thành một bộ ký tự cụ thể.
Tiêu đề
-
Đặt bộ ký tự trong cả tiêu đề HTML và PHP thành UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(Các tiêu đề PHP phải được đặt trước bất kỳ đầu ra (tiếng vang, khoảng trắng, HTML)!)
-
HTML:
<meta charset=utf-8" />
(Các tiêu đề HTML được đặt trong
<head>
/</head>
thẻ)
-
Kết nối
-
Bạn cũng cần chỉ định bộ ký tự trong chính kết nối . Đối với ví dụ PDO của bạn, nó được thực hiện như thế này
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Lưu ý
charset=utf8
-thuộc tính. Các MySQL-API khác có những cách khác nhau để thực hiện việc này nếu bạn sử dụng thứ khác trong tương lai.
Cơ sở dữ liệu
-
Cơ sở dữ liệu của bạn và các bảng của nó phải được đặt thành UTF-8. Lưu ý rằng bộ ký tự không phải giống như đối chiếu. Tôi thấy bạn đã đặt đối chiếu của mình thành UTF-8, vậy là tốt rồi, nhưng hãy làm điều tương tự cho toàn bộ cơ sở dữ liệu và tất cả các bảng.
Bạn có thể làm điều đó bằng cách chạy các truy vấn bên dưới một lần cho mỗi cơ sở dữ liệu và bảng (ví dụ:trong phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Lưu ý rằng bất kỳ dữ liệu nào đã được lưu trữ trong cơ sở dữ liệu sẽ không tự động được sửa bộ ký tự bị hỏng của chúng. Vì vậy, điều quan trọng là bạn phải làm điều này trước khi chèn dữ liệu hoặc bạn chèn lại nó sau khi đặt bộ ký tự.
đặc điểm kỹ thuật php.ini
-
Trong
php.ini
của bạn tệp, bạn nên chỉ định bộ ký tự mặc định cho nền tảng của mình, như thế nàydefault_charset = "utf-8";
Mã hóa tệp
- Điều quan trọng nữa là
.php
bản thân tệp được mã hóa UTF-8. Nếu bạn đang sử dụng Notepad ++ để viết mã của mình, bạn có thể thực hiện việc này trong menu thả xuống "Định dạng" trên thanh tác vụ.
Biểu tượng cảm xúc
- Trong MySQL (cả trong bảng, cơ sở dữ liệu và đối tượng kết nối), bạn sẽ cần chỉ định
utf8mb4
bộ ký tự, trái ngược vớiutf8
thông thường , nếu bạn muốn làm việc với biểu tượng cảm xúc.
Tôi không biết nhiều về Java, nhưng nếu bạn cũng có thể đặt các thuộc tính thành UTF-8 ở đó, hãy làm điều đó. Về bản chất, mọi thứ có thể được đặt thành một bộ ký tự cụ thể phải được đặt giống nhau.
Nếu bạn làm theo tất cả các gợi ý ở trên, rất có thể vấn đề của bạn sẽ được giải quyết. Nếu không, bạn có thể xem bài đăng trên StackOverflow này: UTF-8 xuyên suốt .