Mẹo Hướng dẫn Hướng dẫn dùng types characters trong PHP Mới Nhất
Bùi Trung Huấn đang tìm kiếm từ khóa Hướng dẫn dùng types characters trong PHP được Cập Nhật vào lúc : 2022-09-25 03:12:22 . Với phương châm chia sẻ Bí quyết Hướng dẫn trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc Post vẫn ko hiểu thì hoàn toàn có thể lại phản hồi ở cuối bài để Ad lý giải và hướng dẫn lại nha.
- PHP và mã hóa UTF-8Ở header:Trong file XML:Trong HTML:Chỉ định UTF-8 trong hàm hmlspecialchars:Khi link với MySQL:Sử dụng hàm xử lý chuỗi tương thích với UTF-8:MySQL với mã hóa UTF-8Thay đổi trong file config my.ini:Chuyển đổi tài liệu sử dụng mã hóa latin1 sang UTF-8Lời kết
Nội dung chính
- PHP và mã hóa UTF-8Ở header:Trong file XML:Trong HTML:Chỉ định UTF-8 trong hàm hmlspecialchars:Khi link với MySQL:Sử dụng hàm xử lý chuỗi
tương thích với UTF-8:MySQL với mã hóa UTF-8Thay đổi trong file config my.ini:Chuyển đổi tài liệu sử dụng mã hóa latin1 sang UTF-8Lời kết
Nội dung chính
- PHP và mã hóa UTF-8Ở header:Trong file XML:Trong HTML:Chỉ định UTF-8 trong hàm hmlspecialchars:
Khi link với MySQL:Sử dụng hàm xử lý chuỗi tương thích với UTF-8:MySQL với mã hóa UTF-8Thay đổi trong file config my.ini:Chuyển đổi tài liệu sử dụng mã hóa latin1 sang UTF-8Lời kết
Đã đăng vào thg 12 2, 2022 6:45 CH 7 phút đọc
Đối với một lập trình viên PHP hay MySQL, mọi thứ có vẻ như khá thuận tiện và đơn giản và thoải mái khi thao tác với tài liệu chỉ gồm những ký tự tiếng Anh. Cho đến khi bạn vướng vào sự rắc rối của mã hóa UTF-8 trong xử lý ngôn từ không phải tiếng Anh. Nói sơ lược về mã hóa UTF-8 thì đây là một kiểu mã hóa ký tự của tập ký tự Unicode. Nó được thiết kế để tương thích ngược với mã hóa ASCII và tránh những nhược điểm của UTF-16 và UTF-32. UTF-8 trở thành kiểu mã hóa phổ biến và chiếm ưu thế khi hơn một nửa số trang web hiện tại sử dụng kiểu mã hóa này. Trong nội dung bài viết này, sẽ có 3 hướng dẫn chính được trình bày để hoàn toàn có thể sử dụng mã hóa UTF-8 trong PHP và MySQL:
- Thay đổi trong file config
php.ini và PHP code.Thay đổi trong file config my.ini và những vấn đề liên quan khác đến MySQL.Thay đổi tài liệu trong CSDL MySQL sử dụng mã hóa latin1 thành mã hóa UTF-8.
PHP và mã hóa UTF-8
Để sử dụng UTF-8 là kiểu mã hóa ký tự mặc định, thay đổi ở file config php.ini như sau: default_charset = "utf-8"; Thay đổi trong PHP code:
Ở header:
header('Content-Type: text/html; charset=utf-8');
Trong file XML:
Tuy nhiên, không phải tất cả ký tự UTF-8 đều được đồng ý ở trong XML, vì vậy cần vô hiệu những ký tự này. Một hàm hữu dụng sau đây hoàn toàn có thể xử lý và xử lý vấn đề trên:
function utf8_for_xml($string) return preg_replace('/[^x0009x000ax000dx0020-xD7FFxE000-xFFFD]+/u', ' ', $string);Trong HTML:
- HTML content: HTML form:
Chỉ định UTF-8 trong hàm hmlspecialchars:
htmlspecialchars($str, ENT_NOQUOTES, "UTF-8")
Khi link với MySQL:
Sử dụng hàm mysql_set_charset:
$link = mysql_connect('localhost', 'user', 'password'); mysql_set_charset('utf8', $link);Từ PHP 5.5.0, hàm mysql_set_charset được thay thế bởi mysql::set_charset
$mysqli = new mysqli("localhost", "my_user", "my_password", "test"); /* check connection */ if (mysqli_connect_errno()) printf("Connect failed: %sn", mysqli_connect_error()); exit(); /* change character set to utf8 */ if (!$mysqli->set_charset("utf8")) printf("Error loading character set utf8: %sn", $mysqli->error); else printf("Current character set: %sn", $mysqli->character_set_name()); $mysqli->close();Sử dụng hàm xử lý chuỗi tương thích với UTF-8:
Có nhiều hàm sẽ lỗi hoặc xử lý sai khi một ký tự cần nhiều hơn nữa 1 byte (như UTF-8). Ví dụ hàm strlen sẽ trả về số lượng byte chứ không phải số lượng ký tự. Để xử lý và xử lý việc này còn có 2 tùy chọn:
Sử dụng những hàm iconv (ví dụ: `iconv_strlen,…). Dù vậy, bản thân chuỗi ký tự vẫn nên phải đảm bảo được mã hóa đúng.Extension mbstring: extension đáp ứng một tập đầy đủ những hàm cho việc xử lý mã hóa sử dụng nhiều byte (multibyte)MySQL với mã hóa UTF-8
Thay đổi trong file config my.ini:
[client] default-character-set=UTF-8 [mysql] default-character-set=UTF-8 [mysqld] character-set-client-handshake = false #force encoding to uft8 character-set-server=UTF-8 collation-server=UTF-8_general_ci [mysqld_safe] default-character-set=UTF-8- MySQL UTF-8 thực sự chỉ là một phần của tập ký tự UTF-8 khi chỉ sử dụng tối đa 3 bytes trong khi mã hóa UTF-8 yêu cầu 4 bytes. Do đó, một số trong những ký tự không được tương hỗ trong MySQL UTF-8. Kể từ MySQL 5.5.3, điều này hoàn toàn có thể được giải
quyết với tập ký tự utf8mb4.Trong trường hợp không setup mã hóa khi link với MySQL, thì sau khi link xong, hoàn toàn có thể sử dụng lệnh/truy vấn sau: set names UTF-8;Khi xác định kích cỡ của những trường kiểu varchar, đừng quên UTF-8 yêu cầu 4 bytes trên mỗi ký tự.
Chuyển đổi tài liệu sử dụng mã hóa latin1 sang UTF-8
Thiết lập setup ở file config my.ini như hướng dẫn thứ 2.Thực hiện câu lệnh sau: ALTER SCHEMAyour-db-nameDEFAULT CHARACTER SET UTF-8;Xác nhận mọi thứ đã được setup về UTF-8 mysql> show variables like 'char%';Tạo file dump cho việc quy đổi: mysqldump -u USERNAME -pDB_PASSWORD --opt --skip-set-charset --default-character-set=latin1 --skip-extended-insert DATABASENAME --tables TABLENAME > DUMP_FILE_TABLE.sqlThay thế charset trong file dump từ latin1 sang UTF-8 Ví dụ sử dụng Perl: perl -i -pe 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=UTF-8/' DUMP_FILE_TABLE.sql Đối với người tiêu dùng Windows: Việc quy đổi hoàn toàn có thể thực hiện bằng WordPad sử dụng hiệu suất cao find-and-replace.Kể từ giờ, việc thay đổi sẽ được thực hiện trên CSDL nên đảm bảo backup tài liệu trước khi thực hiện mysql> source "DUMP_FILE_TABLE.sql";Tìm kiếm những bản ghi hoàn toàn có thể bị quy đổi sai và sửa chúng (ví dụ những ký tự được mã hóa 2 lần). Vì những ký tự không phải ASCII là multi-byte (sử dụng nhiều hơn nữa 1 byte/ký tự) nên hoàn toàn có thể tìm chúng bằng phương pháp so sánh số byte và số lượng ký tự.- Kiểm tra có ký tự multi-byte hay là không (nếu truy vấn sau trả về 0 thì không còn ký tự multi-byte và hoàn toàn có thể bỏ qua tiến trình tiếp theo) mysql> select count(*) from MY_TABLE where LENGTH(MY_FIELD) != CHAR_LENGTH(MY_FIELD);Copy những hàng có ký tự multi-byte sang bảng tạm:
- Chuyển đổi ký tự bị mã hóa UTF-8 2 lần về
dạng UTF-8 chuẩn. Vì MySQL đã tự động quy đổi tài liệu sang UTF-8 một lần nữa trên tài liệu UTF-8 nên cần một “thủ thuật” nhỏ để tránh việc quy đổi này. Đầu tiên, quy đổi kiểu mã hóa về latin1, do đó mã hóa 2 lần sẽ bị vô hiệu : alter table temptable modify temptable.ArtistName varchar(128) character set latin1; Lưu ý: Cần đặt đúng kiểu tài liệu cũ. Như ở ví dụ trên là vachar(128) Vấn đề giờ đây là nếu setup cột hiện tại về mã hóa UTF-8, MySQL sẽ quy đổi từ latin1 về UTF-8. Để tránh việc này, tất cả chúng ta thay đổi kiểu tài liệu của cột về blob rồi sau đó mới cài
đặt UTF-8. Điều này tận dụng từ việc MySQL không quy đổi kiểu mã hóa của một blob.
- Loại bỏ hàng chỉ có ký tự single-byte (sử dụng một byte) ra khỏi bảng tạm: delete from temptable where LENGTH(MY_FIELD) = CHAR_LENGTH(MY_FIELD);Thay thế tài liệu vào bảng chính replace into MY_TABLE (select * from temptable);
Lời kết
Mã hóa tài liệu đòi hỏi sự thận trọng và tỉ mỉ. Nếu làm rõ về nó, lập trình viên hoàn toàn có thể tiết kiệm một khoảng chừng thời gian và công sức của con người đáng kể khi đối mặt với những vấn đề về tài liệu. Bài viết này như một lần nữa xác định tầm quan trọng của việc xem xét khi định nghĩa charset trong dự án công trình bất Động sản cũng như môi trường tự nhiên thiên nhiên phát triển ngay từ ban đầu.
Referrence: https://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql
All rights reserved
Tải thêm tài liệu liên quan đến nội dung bài viết Hướng dẫn dùng types characters trong PHP programming php Đầu trong PHP Input trong PHP file_get_contents(php://input) $_get trong php N trong PHP