在php中清理你的帖子标题以插入到SEO链接的数据库

时间:2017-03-11 21:24:16

标签: php regex seo

我正在学习PHP并学习尝试从用户输入的数据中获取字符串并将其插入数据库,以用作网站上帖子的链接。 我在函数中使用正则表达式来改变字符串,如下所示:

function clean_url($string) {
    $string = preg_replace('/[^a-z0-9-]+/','-',strtolower($string)); // allows only characters from a-z and 0-9 and converts string to lower case
    $string = preg_replace('/-$/', '-', $string); // replace dash -
    $string = preg_replace('/--+/','',$string); // replaces double dashes with a single dash
    $string = preg_replace('/^-/', '', $string); // replace dash
    return $string;
}   

我想将所有正则表达式组合成一个有意义的正则表达式。记住这些规则

  1. 只允许来自a-z和0-9的字符,即不允许使用字符
  2. 替换所有 - 以及没有任何内容的字符串的开头和结尾。
  3. 用一个破折号替换所有双破折号。

2 个答案:

答案 0 :(得分:0)

preg_replace()接受数组作为参数,因此一种方法是:

$string = preg_replace(array('/[^a-z0-9-]+/','/-$/','/--+/','/^-/'),array('-','-','',''),strtolower($string));

就个人而言,我更喜欢每个表达式的原始函数,因为它使代码更具可读性。我还会考虑使用str_replace()进行简单替换

答案 1 :(得分:0)

如果您不希望在字符串开头的末尾有任何-个字符,则可以使用trim()

对于双短划线替换,您可以使用str_replace(),对于数字和alpabethic字符,您可以使用preg_replace()

function clean_url($string) {
  return trim(str_replace('--', '-', preg_replace('/[^a-z0-9-]+/','-', strtolower($string))), '-');
}