Php 将文章标题轻松地翻译成url
我有一个人们发布故事的网站,我希望每个故事标题的一部分包含在指向该故事的url中 例如,如果一张海报上贴了一篇标题为“这是一篇示例文章”的故事,我正在寻找一种方法将其翻译为“这是一篇示例文章” 此外,由于标题将在URL中使用,我需要过滤掉所有保留的或潜在危险的字符Php 将文章标题轻松地翻译成url,php,Php,我有一个人们发布故事的网站,我希望每个故事标题的一部分包含在指向该故事的url中 例如,如果一张海报上贴了一篇标题为“这是一篇示例文章”的故事,我正在寻找一种方法将其翻译为“这是一篇示例文章” 此外,由于标题将在URL中使用,我需要过滤掉所有保留的或潜在危险的字符 有没有现成的方法(函数库之类的)来实现这一点,否则我将不得不编写自己的?小php函数来创建轻松的URL public function friendly_url($string) { $table = array(
有没有现成的方法(函数库之类的)来实现这一点,否则我将不得不编写自己的?小php函数来创建轻松的URL
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;
}
为什么不试试这样的方法呢:
$title = "this is an example post";
$url = str_replace(' ', '-', $title);
然后看一下PHP手册的注释部分中的许多示例。我刚刚发现,在一个类似的主题上
第一个答案中给出的函数足以将所有不支持url的字符转换为“-”
然后我使用了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')), '-'));
}
第一个字母的可能副本将所有重音字母替换为其非重音对应字母。接下来,用下划线替换所有空格。最后删除除字母数字字符和下划线以外的所有内容。完成。出于好奇,PHP的
urlencode()
不会解决您的问题吗?