Như tôi đã đăng trước đây trên trang web này, tôi tin rằng nên chuẩn hóa mã hóa một ký tự trên tất cả các phần của hệ thống và vì mã hóa ký tự ưa thích của tôi là UTF-8, khi tôi tạo một hệ thống PHP, tôi kiểm tra những điều sau
- Rằng trình duyệt nhận và diễn giải đầu ra của các tập lệnh PHP của tôi dưới dạng UTF-8
- Biểu mẫu [X]HTML chấp nhận UTF-8
- PHP đó coi dữ liệu nhận được từ cơ sở dữ liệu MySQL là UTF-8
Tất nhiên, chúng tôi cũng cần đặt trình chỉnh sửa của mình thành mã hóa ký tự mong muốn và khi chúng tôi tạo các bảng MySQL, hãy chọn UTF-8 làm mã hóa ký tự [Tôi sẽ đăng một bài về các mã hóa ký tự khác nhau và về các đối chiếu trong tương lai]
Làm cho trình duyệt hiểu tài liệu của chúng tôi là UTF-8
Không phải lúc nào chúng tôi cũng tính đến khả năng sửa đổi php.ini
trong máy chủ của mình, nhưng hãy nói rằng chúng tôi làm được, trong trường hợp này, chúng tôi có thể đặt mã hóa ký tự mặc định cho các tập lệnh PHP của mình bằng cách thay đổi
default_charset = "utf-8"
Tuy nhiên, nếu điều này không khả dụng, chúng tôi có thể chỉ định mã hóa ký tự mà tệp đang được phục vụ gửi tiêu đề ở đầu tập lệnh của chúng tôi
Mặc dù điều này có thể dư thừa để thực hiện, chúng tôi có thể chỉ định mã hóa trong thẻ meta bên trong tài liệu HTML [X] kết quả của chúng tôi
Làm cho trình duyệt chấp nhận UTF-8 trong biểu mẫu
Vì chúng tôi đang xử lý mọi thứ dưới dạng UTF-8, nên chúng tôi có thể đảm bảo rằng các biểu mẫu cũng chấp nhận mã hóa ký tự này bằng cách thêm thuộc tính accept-charset
vào thẻ biểu mẫu
Xử lý dữ liệu chúng tôi thu được từ cơ sở dữ liệu MySQL dưới dạng UTF-8
Chúng tôi phải đảm bảo rằng thông tin mà chúng tôi nhận được từ cơ sở dữ liệu đang được xử lý dưới dạng UTF-8 bởi các tập lệnh PHP của chúng tôi, để làm điều này, chúng tôi có thể sử dụng các chức năng
bool mysqli_set_charset [ mysqli $link , string $charset ]0 hoặc
bool mysqli_set_charset [ mysqli $link , string $charset ]1
bool mysqli_set_charset [ mysqli $link , string $charset ]2
Bây giờ mọi thứ sẽ được hiển thị và hoạt động chính xác trong tập lệnh PHP của chúng tôi
UTF-8 trong tệp văn bản thuần túy và tệp html
Giả sử rằng chúng tôi có quyền truy cập vào tệp cấu hình của Apache,
bool mysqli_set_charset [ mysqli $link , string $charset ]3 [nó có thể nằm trong
default_charset = "utf-8"
0 hoặc trong default_charset = "utf-8"
1], chúng tôi có thể thêm phần sau vào tệp nàydefault_charset = "utf-8"
2
Nhưng nếu chúng tôi không thể sửa đổi
bool mysqli_set_charset [ mysqli $link , string $charset ]3, chúng tôi vẫn có thể làm điều đó bằng cách thêm điều tương tự vào tệp
default_charset = "utf-8"
4 của chúng tôiTất nhiên, chúng tôi có thể thêm thẻ meta vào các tệp HTML của mình như đã mô tả trước đây, nhưng đây là cách để đảm bảo rằng các tệp văn bản thuần túy của chúng tôi được gửi dưới dạng UTF-8
Hàm mysqli_set_charset[] / mysqli. set_charset chỉ định bộ ký tự mặc định sẽ được sử dụng khi gửi dữ liệu từ và đến máy chủ cơ sở dữ liệu
Ghi chú. Để chức năng này hoạt động trên nền tảng Windows, bạn cần có thư viện máy khách MySQL 4. 1. 11 trở lên [đối với MySQL 5. 0 bạn cần 5. 0. 6 trở lên]
cú pháp
Phong cách hướng đối tượng
bool mysqli::set_charset [ string $charset ]
phong cách thủ tục
bool mysqli_set_charset [ mysqli $link , string $charset ]
Tham số
TênMô tảBắt buộc/Kết nối tùy chọnChỉ định kết nối MySQL để sử dụngBộ ký tự yêu cầuChỉ định bộ ký tự mặc địnhBắt buộc
Bài viết này mô tả cách chỉ định bộ ký tự khi bạn kết nối với cơ sở dữ liệu MySQL bằng một trong các phương pháp sau
- Phần mở rộng PHP được cải thiện [mysqli] của MySQL
- PDO [Đối tượng dữ liệu PHP]
Bài viết này giả định rằng bạn đã biết cách kết nối với cơ sở dữ liệu MySQL bằng PHP. Để biết thông tin về cách thực hiện việc này, vui lòng xem bài viết này
Xác định bộ ký tự nào có sẵn trên máy chủ
Để xác định bộ ký tự nào có sẵn trên máy chủ của bạn cho MySQL, hãy đăng nhập vào tài khoản của bạn bằng SSH, rồi nhập lệnh sau
grep "charset name" /usr/share/mysql/charsets/Index.xml | awk -F \" '{print $2}'
Lệnh này hiển thị danh sách các giá trị khả dụng mà bạn có thể sử dụng trong các phương thức được mô tả bên dưới
Để xem thông tin bổ sung về một bộ ký tự, chẳng hạn như mô tả chi tiết của nó, hãy mở /usr/share/mysql/charsets/Index. xml trong trình soạn thảo văn bản
Đặt bộ ký tự bằng tiện ích mở rộng MySQL Cải tiến
Nếu bạn đang sử dụng tiện ích mở rộng MySQL Cải tiến [mysqli], hãy sử dụng phương thức set_charset để chỉ định bộ ký tự. Ví dụ: mã mẫu sau minh họa cách chỉ định bộ ký tự tiếng Ả Rập của Windows bằng mysqli
$mysqli = new mysqli["localhost", "dbuser", "password", "database"]; $mysqli->set_charset["cp1256"];
Đặt bộ ký tự bằng PDO [Đối tượng dữ liệu PHP]
Để chỉ định bộ ký tự bằng PDO, tất cả những gì bạn phải làm là bao gồm cài đặt bộ ký tự trong chuỗi kết nối. Ví dụ: mã mẫu sau minh họa cách chỉ định bộ ký tự Unicode UTF-8 bằng PDO