如何去除特殊字元

CTdream發表於2022-01-26

背景:在我所做的幾個專案過程中,屢次涉及到用一個字串去生成一個合法的連結字串的需求。
比如:根據產品名、活動名、部落格標題等等。

我的第一反應是正則替換,而且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 協議》,轉載必須註明作者和本文連結

相關文章