2012-09-17 40 views
1

我有一個字符串,它包含了變音符號和其他字符我想更換,現在我的代碼看起來像這樣:PHP:從字符串中刪除各種字符 - 最簡單的方法?

$string = preg_replace('/(+)|([()])|(\/)/', '_', $string); 
$string = preg_replace('/_{1,}/', '_', $string); 
$string = preg_replace('/_$/', '', $string); 
$string = str_replace('ö', 'oe', $string); 
$string = str_replace('ü', 'oe', $string); 
$string = str_replace('ä', 'oe', $string); 
$string = str_replace('Ä', 'Ae', $string); 
$string = str_replace('Ü', 'Ue', $string); 
$string = str_replace('Ö', 'Oe', $string); 

是否有這樣做的一個較短的方法嗎?

謝謝:)

回答

2

你可以使用str_replace一個數組:

$find = Array(" ","(",")","/","ö","ü","ä","Ä","Ü","Ö"); 
$replace = Array("_","_","_","_","oe","oe","oe""Ae","Ue","Oe"); 
$string = str_replace($find,$replace,$string); 
$string = preg_replace("/__+/","_",$string); 
$string = rtrim($string,"_"); 
0

'最正確' 的方法是使用PHP的iconv(字符串轉換爲所需的字符編碼)功能...

準確地做你想要的功能的示例:http://php.net/manual/en/function.iconv.php#83238

+1

請問這個答案在一些符號被轉換爲下劃線部分,連續下劃線倒塌,尾隨下劃線被修剪? –

+0

那麼你可以指出音譯和iconv支持,但是,如果* OP會要求的話,這應該是答案的一部分。我會說更多的評論。 – hakre

+0

是的,它不會:)它是處理符號和字符編碼的最正確的方法...最佳答案是先轉換然後做@ Kolink的str_replace或preg_replace,因爲您已經爲其他部分。 – Brian

0

是的。有一件事是,如果這個替換代表了你的應用程序中的某些東西(例如,從字符串創建一個slug:string_slug),首先應該將它包裝到它自己的函數中,通過獲取輸入變量並返回輸出:

function string_slug($string) { 

    $string = preg_replace('/(+)|([()])|(\/)/', '_', $string); 
    $string = preg_replace('/_{1,}/', '_', $string); 
    $string = preg_replace('/_$/', '', $string); 

    $string = str_replace('ö', 'oe', $string); 
    $string = str_replace('ü', 'oe', $string); 
    $string = str_replace('ä', 'oe', $string); 
    $string = str_replace('Ä', 'Ae', $string); 
    $string = str_replace('Ü', 'Ue', $string); 
    $string = str_replace('Ö', 'Oe', $string); 

    return $string; 
} 

正如你所看到的,旁邊的代碼移入函數體,我亦自某些行由他們調用該函數。但那只是作爲一個附註。

是替換函數的用法是再少點麻煩且直截了當:

$string = string_slug($string); 

你能想象做你的字符串操作不太完美的方式?只需一條線,該功能對於您想要做的事情來說是完美的。

接下來,您已經詢問了如何改進更換操作。這僅僅是知識,有很多方法可以做到這一點。

首先,你可以提高你對你使用這兩個函數的知識。這可以向你展示如何改進正則表達式來壓縮它,以及str_replace可以與數組一起工作(@Kolnik gives an example here,但操作順序與您的原始代碼不同)。

旁邊的是,str_replace部分做一些所謂的像一個轉換表。用另一個替換一個。 PHP中支持這個功能的函數被稱爲strtrDocs

還要注意保存PHP文件時使用正確的編碼,否則元音替換(Ä等)可能無法正常工作。你

可能也想了解一些所謂transliteration­Wikipedia