2012-06-25 58 views
0

我有一個網站,人們發佈故事,並且我希望將每個故事標題的一部分包含在指向該故事的url中。將帖子標題轉換爲url-firendly

例如,如果一個海報發佈了一篇題爲「這是一個示例文章」的故事,我正在尋找一種方法將它翻譯成「這是一個示例文章」。

此外,由於該標題將用於URL中,我需要過濾掉所有保留或潛在危險的字符。

是否有一個已經完成的方法(函數庫任何)要做到這一點,否則我將不得不寫我自己的?

+3

[?消毒字符串,使他們的網址和文件名安全]的可能重複(http://stackoverflow.com/questions/2668854/sanitizing-strings-to- make-them-url-and-filename-safe) – j08691

+0

首先用所有非重音字母替換所有重音字母。接下來用下劃線替換所有空格。最後刪除除字母數字字符和下劃線之外的所有內容。完成。 – Anne

+1

出於好奇,PHP的urlencode()不會解決你的問題嗎? http://php.net/manual/en/function.urlencode.php – ametren

回答

0

我剛剛發現this question,關於類似的話題。

在第一個答案中給出的函數足以將所有非網址友好字符翻譯爲' - '。

然後我使用了一個像Oswaldo這樣的數組,在他的回答和strtr中將我想要的字符(希臘語)翻譯成英文。

最終產品是這樣的:

function titleToUrlFriendlyTitle($string){ 
     $table = array('Α'=>'a','Ά'=>'a','ά'=>'a', 'α'=>'a', 'Β'=>'b', 'β'=>'b', 'γ'=>'g', 'Γ'=>'g', 'Δ'=>'d', 'δ'=>'d', 'έ'=>'e', 'ε'=>'e', 'Ε'=>'e', 'Έ'=>'e', 'ζ'=>'z', 'Ζ'=>'z', 'η'=>'i', 'Η'=>'i', 'ή'=>'i', 'Ή'=>'i', 'θ'=>'th', 'Θ'=>'th', 'ι'=>'i', 'Ι'=>'i', 'ί'=>'i', 'Ί'=>'i', 'ϊ'=>'i', 'Ϊ'=>'i', 'ΐ'=>'i', 'κ'=>'k', 'Κ'=>'k', 'λ'=>'l', 'Λ'=>'l', 'μ'=>'m', 'Μ'=>'m', 'ν'=>'n', 'Ν'=>'n', 'ξ'=>'ks', 'Ξ'=>'ks', 'ο'=>'o', 'Ο'=>'o', 'Ό'=>'o', 'ό'=>'o', 'π'=>'p', 'Π'=>'p', 'ρ'=>'r', 'Ρ'=>'r', 'σ'=>'s', 'Σ'=>'s', 'τ'=>'t', 'Τ'=>'t', 'Υ'=>'u', 'υ'=>'u', 'Ύ'=>'u', 'ύ'=>'u', 'ϋ'=>'u', 'Ϋ'=>'u', 'ΰ'=>'u', 'φ'=>'f', 'Φ'=>'f', 'χ'=>'x', 'Χ'=>'x', 'Ψ'=>'ps', 'ψ'=>'ps', 'ω'=>'o', 'Ω'=>'o', 'ώ'=>'o', 'Ώ'=>'o'); 
     $string = strtr($string , $table); 
     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')), '-')); 
     } 
0

小php功能使frindly網址。

public function friendly_url($string) { 
     $table = array(
      'Š' => 'S',   'š' => 's', 
      'Ŀ' => 'Dj', 
      'đ' => 'dj', 
      'Ž' => 'Z', 
      'ž' => 'z', 
      'Č' => 'C', 
      'Ŀ' => 'c', 
      'Ć' => 'C', 
      'ć' => 'c', 
      'À' => 'A', 
      'ÿ' => 'A', 
      'Â' => 'A', 
      'Ã' => 'A', 
      'Ä' => 'A', 
      'Å' => 'A', 
      'Æ' => 'A', 
      'Ç' => 'C', 
      'È' => 'E', 
      'É' => 'E', 
      'Ê' => 'E', 
      'Ë' => 'E', 
      'Ì' => 'I', 
      'ÿ' => 'I', 
      'Î' => 'I', 
      'ÿ' => 'I', 
      'Ñ' => 'N', 
      'Ò' => 'O', 
      'Ó' => 'O', 
      'Ô' => 'O', 
      'Õ' => 'O', 
      'Ö' => 'O', 
      'Ø' => 'O', 
      'Ù' => 'U', 
      'Ú' => 'U', 
      'Û' => 'U', 
      'Ü' => 'U', 
      'ÿ' => 'Y', 
      'Þ' => 'B', 
      'ß' => 'Ss', 
      'à' => 'a', 
      'á' => 'a', 
      'â' => 'a', 
      'ã' => 'a', 
      'ä' => 'a', 
      'å' => 'a', 
      'æ' => 'a', 
      'ç' => 'c', 
      'è' => 'e', 
      'é' => 'e', 
      'ê' => 'e', 
      'ë' => 'e', 
      'ì' => 'i', 
      'í' => 'i', 
      'î' => 'i', 
      'ï' => 'i', 
      'ð' => 'o', 
      'ñ' => 'n', 
      'ò' => 'o', 
      'ó' => 'o', 
      'ô' => 'o', 
      'õ' => 'o', 
      'ö' => 'o', 
      'ø' => 'o', 
      'ù' => 'u', 
      'ú' => 'u', 
      'û' => 'u', 
      'ý' => 'y', 
      'ý' => 'y', 
      'þ' => 'b', 
      'ÿ' => 'y', 
      'Ŕ' => 'R', 
      'ŕ' => 'r', 
      ' ' => '-' 
     ); 
     $string = strtr($string, $table); 
     $string = strtolower($string); 
     $string = preg_replace("/[^a-zA-Z0-9_.-]/", "", $string); 

     return $string; 
    } 
0

爲什麼不嘗試這樣的:

$title = "this is an example post"; 
$url = str_replace(' ', '-', $title); 

,然後看看PHP手冊中在評論例子很多urlencode部分。