如何去除特殊字符

背景:在我所做的几个项目过程中,屡次涉及到用一个字符串去生成一个合法的链接字符串的需求。
比如:根据产品名、活动名、博客标题等等。

我的第一反应是正则替换,而且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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!