Hàm PHP htmlspecialchars()

Mô hình

Chuyển đổi các ký tự định nghĩa sẵn "<" (nhỏ hơn) và ">" (đại hơn) thành ký tự HTML:

<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

Kết quả đầu ra HTML của mã trên như sau (xem mã nguồn):

<!DOCTYPE html>
<html>
<body>
This is some <b>bold</b> text.
</body>
</html>

Kết quả đầu ra của mã trên trình duyệt như sau:

This is some <b>bold</b> text.

Chạy ví dụ

Định nghĩa và cách sử dụng

Hàm htmlspecialchars() chuyển đổi các ký tự định nghĩa sẵn thành ký tự HTML.

Các ký tự định nghĩa sẵn là:

  • & (và) trở thành &
  • " (dấu ngoặc kép) trở thành "
  • ' (dấu ngoặc đơn) trở thành '
  • < (nhỏ hơn) trở thành <
  • > (đại hơn) trở thành >

Lưu ý:Nếu cần chuyển đổi các ký tự HTML đặc biệt trở lại ký tự, hãy sử dụng htmlspecialchars_decode() Hàm.

Cú pháp

htmlspecialchars(string,flags,character-set,double_encode)
Tham số Mô tả
string Bắt buộc. Quy định chuỗi cần chuyển đổi.
flags

Tùy chọn. Quy định cách xử lý dấu ngoặc, mã không hợp lệ và loại tài liệu nào được sử dụng.

Loại dấu ngoặc hợp lệ:

  • ENT_COMPAT - Mặc định. Chỉ mã hóa dấu ngoặc kép.
  • ENT_QUOTES - Mã hóa dấu ngoặc kép và dấu ngoặc đơn.
  • ENT_NOQUOTES - Không mã hóa bất kỳ dấu ngoặc kép nào.

Mã không hợp lệ:

  • ENT_IGNORE - Bỏ qua mã không hợp lệ thay vì để hàm trả về một chuỗi rỗng. Nên tránh sử dụng vì có thể ảnh hưởng đến bảo mật.
  • ENT_SUBSTITUTE - Thay thế mã không hợp lệ bằng một ký tự đã chỉ định có ký tự thay thế Unicode U+FFFD (UTF-8) hoặc &#FFFD; mà không trả về một chuỗi rỗng.
  • ENT_DISALLOWED - Thay thế các điểm mã không hợp lệ trong loại tài liệu được chỉ định bằng ký tự thay thế Unicode U+FFFD (UTF-8) hoặc &#FFFD;.

Flags thêm để quy định loại tài liệu sử dụng:

  • ENT_HTML401 - Mặc định. Xử lý mã như HTML 4.01.
  • ENT_HTML5 - Xử lý mã như HTML 5.
  • ENT_XML1 - Xử lý mã như XML 1.
  • ENT_XHTML - Xử lý mã như XHTML.
character-set

Tùy chọn. Chuỗi quy định tập hợp ký tự cần sử dụng.

Giá trị được phép:

  • UTF-8 - Mặc định. 8 byte Unicode tương thích với ASCII
  • ISO-8859-1 - Tây Âu
  • ISO-8859-15 - Tây Âu (bao gồm biểu tượng euro + các chữ cái Pháp và Finnish bị mất trong ISO-8859-1)
  • cp866 - Tập hợp ký tự Cyrillic chuyên dụng DOS
  • cp1251 - Tập hợp ký tự Cyrillic chuyên dụng Windows
  • cp1252 - Tập hợp ký tự西欧专用 Windows
  • KOI8-R - Nga
  • BIG5 - Trung văn phồn thể, chủ yếu được sử dụng ở Đài Loan
  • GB2312 - Trung văn giản thể, tập hợp ký tự tiêu chuẩn quốc gia
  • BIG5-HKSCS - Big5 với mở rộng Hong Kong
  • Shift_JIS - Nhật
  • EUC-JP - Nhật
  • MacRoman - Tập hợp ký tự của hệ điều hành Mac

Ghi chú:Trong các phiên bản PHP trước 5.4, các tập hợp ký tự không thể nhận diện sẽ bị bỏ qua và được thay thế bằng ISO-8859-1. Từ PHP 5.4 trở đi, các tập hợp ký tự không thể nhận diện sẽ bị bỏ qua và được thay thế bằng UTF-8.

double_encode

Tùy chọn. Giá trị boolean quy định có mã hóa các HTML entity hiện có hay không.

  • TRUE - Mặc định. Sẽ chuyển đổi mỗi entity.
  • FALSE - Không mã hóa các HTML entity hiện có.

Chi tiết kỹ thuật

Giá trị trả về:

Trả về chuỗi đã được chuyển đổi.

Nếu string Nếu包含 không hợp lệ mã hóa, sẽ trả về một chuỗi rỗng, trừ khi đã thiết lập dấu hiệu ENT_IGNORE hoặc ENT_SUBSTITUTE.

Phiên bản PHP: 4+
Ghi chú cập nhật:

Trong PHP 5,character-set Giá trị mặc định của tham số đã thay đổi thành UTF-8.

Trong PHP 5.4, đã thêm mới: ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_HTML5, ENT_XML1 và ENT_XHTML.

Trong PHP 5.3, đã thêm mới ENT_IGNORE.

Trong PHP 5.2.3, đã thêm mới double_encode Tham số.

Trong PHP 4.1, đã thêm character-set Tham số.

Thực hành thêm

Ví dụ 1

Chuyển đổi một số ký tự được định nghĩa trước thành mã thực thể HTML:

<?php
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // Chỉ chuyển đổi dấu kép
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES);// Chuyển đổi dấu kép và dấu ngoặc kép
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // Không chuyển đổi bất kỳ dấu ngoặc kép nào
?>

Kết quả đầu ra HTML của mã trên như sau (xem mã nguồn):

<!DOCTYPE html>
<html>
<body>
Bill & 'Steve'<br>
Bill & 'Steve'<br>
Bill & 'Steve'
</body>
</html>

Kết quả đầu ra của mã trên trình duyệt như sau:

Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'

Chạy ví dụ

Ví dụ 2

Chuyển đổi dấu kép thành mã thực thể HTML:

<?php
$str = 'Tôi yêu "PHP".';
echo htmlspecialchars($str, ENT_QUOTES); // Chuyển đổi dấu kép và dấu ngoặc kép
?>

Kết quả đầu ra HTML của mã trên như sau (xem mã nguồn):

<!DOCTYPE html>
<html>
<body>
Tôi yêu "PHP".
</body>
</html>

Kết quả đầu ra của mã trên trình duyệt như sau:

Tôi yêu "PHP".

Chạy ví dụ