2011-02-23 62 views
1

我正在使用The perfect PHP clean url generator來清除一些帶有上傳腳本的文件名(以及在其他地方清理我的固定鏈接)。我會如何修改它允許.如果函數如下:允許在PHP中的點preg_replace

setlocale(LC_ALL, 'en_US.UTF8'); 
function toAscii($str, $replace=array(), $delimiter='-', $exception = '') { 
    if(!empty($replace)) { 
     $str = str_replace((array)$replace, ' ', $str); 
    } 

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

    return $clean; 
} 

在此先感謝。

編輯稍微修改該功能以反映我的實際使用情況 - 對此感到遺憾。

回答

6

所以,你只是想避免更換字面.字符,是否正確?如果它是一個字符類中的點應該從字面上解釋,所以你的第一個正則表達式的行只會變成:

$clean = preg_replace("/[^a-zA-Z0-9\/_|+ .-]/", '', $clean); 
+0

@jeerose:我覺得我可能會誤解你正在做的事情。你有沒有運行上述版本,並有問題?你嘗試了什麼,結果如何? – 2011-02-23 22:31:57

+0

沒有你打它的權利。非常感謝! – jay 2011-02-24 03:22:43

0

不是一個答案,只是要注意的事項:

正則表達式設置:

$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
$clean = strtolower(trim($clean, '-')); 
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

上面破折號應該在組的開始:

$clean = preg_replace("/[^-a-zA-Z0-9\/_|+ ]/", '', $clean); 
$clean = strtolower(trim($clean, '-')); 
$clean = preg_replace("/[-\/_|+ ]+/", $delimiter, $clean); 

如果它們不在開始處,則表示範圍的字符,即[A-Za-z0-9]。

可能幫助別人。

+0

連字符實際上可以在集合的開始或結束處。我喜歡把它們放在開頭,但這只是一種偏好。 http://www.regular-expressions.info/charclass.html - 檢查「字符類內部的元字符」部分。 – 2011-02-24 05:10:54