sanitize_text_field() – Hàm WordPress bạn rất có thể đang dùng sai

sanitize_text_field là một trong những hàm được dùng nhiều nhất trong WordPress. Gần như dev nào cũng từng viết nó, từng tin tưởng nó, và từng… dùng nó cho mọi thứ.

sanitize_text_field() – Hàm WordPress bạn rất có thể đang dùng sai

Vấn đề là: sanitize_text_field không sai, nhưng cách chúng ta dùng nó thì rất hay sai. Và sanitize sai còn nguy hiểm hơn là không sanitize.

sanitize_text_field thực sự làm gì?

Đúng như tên gọi, sanitize_text_field được thiết kế để:

  • Làm sạch text ngắn
  • Loại bỏ HTML, script, tag nguy hiểm
  • Dùng cho dữ liệu kiểu: tên, tiêu đề ngắn, label, slug đơn giản
$title = sanitize_text_field( $_POST['title'] );

Đến đây thì không có gì sai. Sai bắt đầu từ lúc dev nghĩ rằng:

sanitize_text_field = hàm sanitize cho mọi loại dữ liệu

Sai lầm phổ biến: dùng sanitize_text_field cho mọi thứ

Rất nhiều code ngoài kia đang làm những việc kiểu thế này:

$content = sanitize_text_field( $_POST['content'] );

Hoặc tệ hơn:

$html = sanitize_text_field( $_POST['html'] );

Đây là sai hoàn toàn về mặt tư duy.

Vì sao lại sai?

sanitize_text_field sẽ:

  • Xóa toàn bộ HTML
  • Cắt xuống còn plain text
  • Làm mất cấu trúc dữ liệu ban đầu

Nếu dữ liệu của bạn là:

<p>Hello <strong>world</strong></p>

Sau khi sanitize:

Hello world

HTML biến mất. Format biến mất. Ý đồ ban đầu của dữ liệu cũng biến mất.

Sanitize sai còn nguy hiểm hơn không sanitize

Nghe hơi ngược đời, nhưng đúng.

Khi sanitize sai:

  • Dữ liệu bị biến dạng
  • Dev khác không biết vì sao dữ liệu “mất chữ”, “mất format”
  • Bạn tự tạo bug logic rất khó debug

Trong khi đó, không sanitize (nhưng escape đúng lúc) đôi khi còn an toàn và rõ ràng hơn.

sanitize_text_field dùng đúng khi nào?

Dùng sanitize_text_field khi dữ liệu thỏa mãn các điều kiện sau:

  • Chỉ là text ngắn
  • Không cần HTML
  • Không cần xuống dòng

Ví dụ hợp lý:

  • Tên người dùng
  • Tiêu đề ngắn
  • Search keyword
  • Custom field dạng label
$keyword = sanitize_text_field( wp_unslash( $_GET['s'] ) );

Khi KHÔNG nên dùng sanitize_text_field?

Đừng dùng hàm này cho:

  • Nội dung bài viết
  • Textarea dài
  • HTML markup
  • JSON string

Đây không phải lỗi của WordPress. Đây là lỗi của dev dùng sai tool.

Tư duy đúng: Sanitize theo ngữ cảnh, không theo thói quen

Câu hỏi đúng không phải là:

“Dữ liệu này đã sanitize chưa?”

Mà là:

“Dữ liệu này là loại gì, và cần xử lý như thế nào?”

sanitize_text_field chỉ là một mảnh ghép nhỏ trong hệ thống sanitize / validate / escape của WordPress.

Kết luận

  • sanitize_text_field không phải thuốc trị bách bệnh
  • Dùng sai sẽ làm hỏng dữ liệu một cách âm thầm
  • Chỉ dùng khi dữ liệu thực sự là text ngắn, không HTML

WordPress không thiếu hàm. Thứ thiếu là tư duy dùng hàm đúng chỗ.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...