2010-02-10 26 views

Trả lời

8

Xem câu trả lời đầu tiên ở đây URL Friendly Username in PHP?:

function Slug($string) 
{ 
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); 
} 

$user = 'Alix Axel'; 
echo Slug($user); // alix-axel 

$user = 'Álix Ãxel'; 
echo Slug($user); // alix-axel 

$user = 'Álix----_Ãxel!?!?'; 
echo Slug($user); // alix-axel 
+0

Nó không làm việc cho CJK. – user198729

+1

@ user198729: Bạn có thể đưa ra ví dụ về đầu vào/đầu ra dự kiến ​​không? –

20

Bạn có thể muốn sử dụng một "sên" để thay thế. Thay vì sử dụng tiêu đề nguyên văn làm URL, bạn strtolower() và thay thế tất cả các ký tự không phải chữ và số bằng dấu gạch nối, sau đó xóa dấu gạch ngang trùng lặp. Nếu bạn muốn nhận thêm tín dụng, bạn cũng có thể xóa số stopwords.

Vì vậy, "1-As thấp dưới 10% thanh toán, thành viên chơi gôn miễn phí !!!" trở thành:

as-low-as-10-downpayment-free-gold-membership

Something như thế này:

function sluggify($url) 
{ 
    # Prep string with some basic normalization 
    $url = strtolower($url); 
    $url = strip_tags($url); 
    $url = stripslashes($url); 
    $url = html_entity_decode($url); 

    # Remove quotes (can't, etc.) 
    $url = str_replace('\'', '', $url); 

    # Replace non-alpha numeric with hyphens 
    $match = '/[^a-z0-9]+/'; 
    $replace = '-'; 
    $url = preg_replace($match, $replace, $url); 

    $url = trim($url, '-'); 

    return $url; 
} 

Bạn có thể có thể rút ngắn nó với regexps còn nhưng nó khá đơn giản như nó vốn có. Tiền thưởng là bạn có thể sử dụng cùng một chức năng để xác thực tham số truy vấn trước khi bạn chạy truy vấn trên cơ sở dữ liệu để khớp với tiêu đề, vì vậy ai đó không thể gắn những thứ ngớ ngẩn vào cơ sở dữ liệu của bạn.

0

tôi chỉ cần tạo một ý chính với một chức năng sên hữu ích:

https://gist.github.com/ninjagab/11244087

Bạn có thể sử dụng nó để chuyển đổi tiêu đề để seo url thân thiện.

<?php 
class SanitizeUrl { 

    public static function slug($string, $space="-") { 
     $string = utf8_encode($string); 
     if (function_exists('iconv')) { 
      $string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); 
     } 

     $string = preg_replace("/[^a-zA-Z0-9 \-]/", "", $string); 
     $string = trim(preg_replace("/\\s+/", " ", $string)); 
     $string = strtolower($string); 
     $string = str_replace(" ", $space, $string); 

     return $string; 
    } 
} 

$title = 'Thi is a test string with some "strange" chars ò à ù...'; 
echo SanitizeUrl::slug($title); 
//this will output: 
//thi-is-a-test-string-with-some-strange-chars-o-a-u 
+0

Bằng cách đó, bạn sẽ có nhiều "-" khi có nhiều dấu cách trong chuỗi của mình. – Guillaume

-1

Để đơn giản hóa chỉ đầy đủ danh sách các biến $change_to$to_change

<?php 

// Just full the array list to make replacement complete 
// In this space will change to _, à to just a 



$to_change = [ 
    ' ', 'à', 'à', 'â','é', 'è', 'ê', 'ç', 'ù', 'ô', 'ö' // and so on 
]; 

$change_to = [ 
    '_', 'a', 'a', 'a', 'e', 'e', 'e','c', 'u', 'o', 'o' // and so on 
]; 

$texts = 'This is my slug in êlàb élaboré par'; 

$page_id = str_replace($to_change, $change_to, $texts); 
Các vấn đề liên quan