2011-01-24 26 views
14

Tôi luôn bị nhầm lẫn với URL/HTML Encoding/Escaping. Tôi đang sử dụng PHP, vì vậy muốn xóa một số thứ.URL/HTML Escaping/Encoding

Tôi có thể nói rằng tôi nên luôn luôn sử dụng

  • urlencode: cho truy vấn phụ tùng chuỗi cá nhân

    $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else'); 
    
  • htmlentities: cho thoát ký tự đặc biệt như <> để nếu được trả lại đúng cách trình duyệt

Sẽ có bất kỳ nơi nào khác tôi có thể sử dụng từng chức năng. Tôi không giỏi ở tất cả những thứ thoát này, luôn bị nhầm lẫn bởi chúng

Trả lời

29

Trước hết, bạn không nên sử dụng htmlentites khoảng 99% thời gian. Thay vào đó, bạn nên sử dụng htmlspecialchars() để thoát văn bản để sử dụng bên trong tài liệu xml/html. htmlentities chỉ hữu ích để hiển thị các ký tự mà ký tự gốc bạn đang sử dụng không thể hiển thị (nó hữu ích nếu các trang của bạn ở dạng ASCII, nhưng bạn có một số ký tự UTF-8 mà bạn muốn hiển thị). Thay vào đó, chỉ cần làm cho toàn bộ trang UTF-8 (nó không khó), và được thực hiện với nó.

Theo như urlencode, bạn nhấn đinh trên đầu.

Vì vậy, để tóm tắt lại:

  • Bên trong HTML:

    <b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b> 
    
  • Bên trong một url:

    $url = '?foo='.urlencode('bar'); 
    
18

Điều đó đúng. Mặc dù - htmlspecialchars vẫn ổn, miễn là bạn nhận được bộ ký tự thẳng. Mà bạn nên làm anyway. Vì vậy, tôi có xu hướng sử dụng nó, vì vậy tôi sẽ tìm ra sớm nếu tôi đã sai lầm nó lên.

Cũng lưu ý rằng nếu bạn đặt url vào ngữ cảnh html (giả sử - trong số href của số a -agag), bạn cần phải thoát khỏi điều đó. Vì vậy, bạn thường sẽ thấy một cái gì đó như:

echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>" 
+0

Great câu trả lời. Đây là một ví dụ về cách thoát khỏi một ngữ cảnh trong một ngữ cảnh khác một cách chính xác. Điều quan trọng cần lưu ý là mặc dù urlencode sẽ không bao giờ xuất ra bất kỳ ký tự html đặc biệt nào để gây ra bất kỳ vấn đề gì, nó không làm tổn thương để thoát khỏi toàn bộ nội dung thuộc tính html. – Phil