如何去除特殊字符
背景:在我所做的几个项目过程中,屡次涉及到用一个字符串去生成一个合法的链接字符串的需求。
比如:根据产品名、活动名、博客标题等等。
我的第一反应是正则替换,而且php
也提供了很多的字符串函数可以去处理这种问题,比如:trim
系列,str_replace
等等。
但是,无论是正则替换还是内置函数,都不得不面对特殊字符到底都有哪些的问题,也就是特殊字符的数据样本无法预估。于是我反其道行之,利用字符串遍历以及一个合法链接的字符构成而去实现这个需求。
大概思路:先对字符串进行空格替换处理,然后进行字符串遍历,最后去除中间连续多个的替换字符。
由于我接到的需求是生成一个合法的链接字符串,并且把特殊字符及空格替换为中划线:-
,所以默认替换字符是中划线。
废话不多说,代码如下:
function makeUrl($str, $replacement = '-')
{
$str = preg_replace('/\s+/', $replacement, $str);
$newStr = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
if (preg_match('/[0-9a-zA-Z]/', $str[$i])) {
$newStr .= $str[$i];
} else {
$newStr .= $replacement;
}
}
return trim(preg_replace('/-+/', $replacement, $newStr), $replacement);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接