2010-04-05 26 views
6

thể trùng lặp:
URL Friendly Username in PHP?Cách tốt nhất để thoát ra và tạo ra một sên

im bằng cách nào đó nhầm lẫn trong việc sử dụng các chức năng thích hợp để thoát ra và tạo ra một sên

i sử dụng này:

$slug_title = mysql_real_escape_string()($mtitle); 

nhưng ai đó nói với tôi không sử dụng nó và sử dụng urlencode()

cái nào là tốt hơn cho sên và an ninh

như tôi có thể nhìn thấy trong SO, nó chèn - giữa các từ:

https://stackoverflow.com/questions/941270/validating-a-slug-in-django 
+0

Xem câu trả lời của tôi ở đây http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 –

Trả lời

11

Sử dụng MySQL hoặc URL thoát không phải là cách để đi.

Here is an article nào đó tốt hơn:

function toSlug($string,$space="-") { 
    if (function_exists('iconv')) { 
     $string = @iconv('UTF-8', 'ASCII//TRANSLIT', $string); 
    } 
    $string = preg_replace("/[^a-zA-Z0-9 -]/", "", $string); 
    $string = strtolower($string); 
    $string = str_replace(" ", $space, $string); 
    return $string; 
} 

này cũng làm việc một cách chính xác cho các ký tự có dấu.

+0

vấn đề là cho các ngôn ngữ arabic và mb công việc chức năng này sẽ không và thay đổi tất cả các ký tự thành - –

+2

Thật không may iconv dường như hoạt động không ổn định trên các nền tảng: php -r 'print iconv ("UTF-8", "ASCII // TRANSLIT", "bär"). "\ n"; ' cho 'bar' trên Ubuntu (10.04) và 'b' ar 'trên máy Mac của tôi – tuomassalo

+3

Ah ... nền tảng độc lập của PHP ... phải yêu nó. – Thomas

2

mysql_real_escape_string() có mục đích khác với urlencode(), cả hai đều không thích hợp để tạo slug.

Sên được cho là rõ ràng & có nghĩa là cụm từ mô tả chính xác trang.

mysql_real_escape_string() thoát khỏi các ký tự nguy hiểm có thể thay đổi mục đích của chuỗi truy vấn ban đầu.

urlencode() thoát các ký tự URL không hợp lệ bằng "%" theo sau là 2 chữ số thập phân đại diện cho mã của chúng (ví dụ:% 20 cho khoảng trắng). Bằng cách này, chuỗi kết quả sẽ là không phảirõ ràng & có ý nghĩa, vì chuỗi ký tự khó chịu, ví dụ: http://www.domain.com/bad%20slug%20here%20%3C--

Vì vậy, bất kỳ ký tự nào có thể bị ảnh hưởng bởi urlencode() phải được bỏ qua, ngoại trừ các dấu cách thường được thay thế bằng -.

Các vấn đề liên quan