2014-04-18 29 views
2

我正在编写一个自定义的博客脚本,并且作为它的一部分,我正在使用用于发布URL的slug。我有它的代码到目前为止是需要函数的轻微修改

public function get_slug($str) { 
    // convert to lowercase 
    $str = strtolower($str); 
    // remove special chars 
    $str = preg_replace('/[^a-zA-Z0-9]/i', ' ', $str); 
    // remove what space from beginning and end 
    $str = trim($str); 
    // remove repeat spaces 
    $str = preg_replace('/\s+/', ' ', $str); 
    // replace spaces with hyphens 
    $str = preg_replace('/\s+/', '-', $str); 

    return $str; 
} 

这伟大工程的大部分地区,但是如果在字中间的特殊字符它只是用连字符转向“可以代替它,我已经注意到't'into'can-t'而不是'can not'

虽然在预设情况下,我可以编辑数据库并手动修复它,我想自动从字的中间去掉特殊字符,不要用炒作来代替它们。

+1

退房[此功能(http://stackoverflow.com/questions/3230012/:

$str = preg_replace('/[^a-zA-Z0-9]/i', ' ', $str); 

上述前将这个用它们的对应物替换口音/ 3230193#3230193)作为这一个的潜在替代品。 –

+1

尝试在第一次替换中将空格更改为空字符串。 – Luigi

回答

2

尝试改变:

$str = preg_replace('/[^a-zA-Z0-9]/i', ' ', $str); 

到:

$str = preg_replace('/[^a-z0-9\s]/i', '', $str); 

这会不会把空间让你不希望他们,但允许已经存在的那些留(现在)。那么你不会在文字中间有空格。 (我也从你的正则表达式中取出了A-Z,因为它不是必须的,因为字符串已经是小写字母,并且你也使用i修饰符,这使得它不区分大小写)。

+0

感谢@John,仍然是PHP新手,对于正则表达式非常新,已经从教程中获得了这一点。 – Railto

0

你更换'这里:

$str = preg_replace("/'/i", '', $str);