2010-12-16 13 views
2

當我使用下面的腳本,我得到雙重字符。爲什麼?當使用preg_replace時,我得到雙重字符...?

$clean_lastname = "Dür"; 
$clean_lastname = preg_replace("/[ùúûü]/", "u", $clean_lastname); 
echo $clean_lastname; 

輸出:Duur

我希望它是Dur

我仍然在做一些錯誤的事情...'在preg函數中放置一個數組的值是什麼?

$clean_lastname = "Boerée"; 
$l = 0; 
$pattern = array('[ÀÁÂÃÄÅ]','[Ç]','[ÈÉÊË]','[ÌÍÎÏ]','[Ñ]','[ÒÓÔÕÖØ]','[Ý]','[ß]','[àáâãäå]','[ç]','[èéêë]','[ìíîï]','[ñ]','[òóôõöø]','[ùúûü]','[ýÿ]'); 
$replace = array(A,C,E,I,N,O,Y,S,a,c,e,i,n,o,u,y); 

foreach ($pattern as $wierdchar) 
{ 
    $clean_lastname = preg_replace('/$wierdchar/u', '$replace[$l]', $clean_lastname); 
    $l++; 
} 

//$clean_lastname = preg_replace('/[èéêë]/u', 'e', $clean_lastname); 

//$clean_lastname = strtr($clean_lastname, "ùúûü","uuuu"); 
echo $clean_lastname; 

回答

1
<?php 
    $vowels = array("ù","ú","û","ü"); 
    $consonents = array("u","u","u","u"); 
    $clean_lastname = "Dür"; 
    echo str_replace($vowels, $consonents, $clean_lastname); 
?> 
+0

你應該閱讀從這個以前的問題OP ... – ajreal 2010-12-16 16:49:52

+0

它適用於這個特定的字符串,但有更多的,我也有一個ù,ú,û,ü等... – Thijs 2010-12-16 16:55:06

+0

我已編輯答案請檢查 – 2010-12-16 17:03:47

1
$clean_lastname = str_replace(array('ù', 'ú', 'û', 'ü', 'Ù', 'Ú', 'Û', 'Ü'), array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'), $clean_lastname); 

//或解決您最初的問題:

$clean_lastname = preg_replace('/[ùúûü]/u', 'u', $clean_lastname); 
+0

我解決了它!我需要preg_replace與你修改!謝謝Soooo!許多!我真的迷路了! – Thijs 2010-12-16 18:00:02

1

堅持你原來的strtr

$clean_lastname = "Dür Dùr Dúr Dûr"; 
$clean_lastname = strtr($clean_lastname, "ùúûü", "uuuu"); 
echo $clean_lastname; 
2

唯一的情況,我可以像這樣的事情發生是當你的兩個字符串(輸入str ing和模式)具有不同的字符編碼或兩者都是UTF-8,但您沒有正確指定它。

因爲在後者的情況下,"Dür"相當於"D\xC3\xBCr"和圖案"/[ùúûü]/"ü與兩個字節序列0xC3BC編碼)等效於"/[\xC3\xB9\xC3\xBA\xC3\xBB\xC3\xBC]/"。使用UTF-8工作時

echo preg_replace("/[\xC3\xB9\xC3\xBA\xC3\xBB\xC3\xBC]/", "u", "D\xC3\xBCr"); // Duur 

所以確保設置u modifier flag使得圖案與輸入字符串是:由於通過轉義序列\xHH指定的每個字節被作爲一個單一的字符處理,這產生以下結果爲UTF-8編碼的處理:

"/[ùúûü]/u" 

編輯現在你澄清你的意圖,你似乎試圖實現某種transliteration,你應該看看iconv和它的音譯能力:

iconv("UTF-8", "US-ASCII//TRANSLIT", $str) 

參見其他相關主題,如:

+0

謝謝!我需要在PHP設置中更改此設置嗎?在Ubuntu上工作... – Thijs 2010-12-16 17:23:36

+0

我到那裏...所以如果我是正確的......我應該在strtr函數中輸入正確的UTF-8編碼字符......那麼它會工作嗎? – Thijs 2010-12-16 17:38:18

+0

@Thijs:不,您實際上只需要在您的模式中使用* u *修飾符即可將模式和主題字符串視爲UTF-8編碼。不,「strtr」是一個單字節字符串函數,但UTF-8是一個多字節字符串編碼。您不應該將單字節字符串函數與多字節字符串編碼一起使用。 – Gumbo 2010-12-16 17:46:29

相關問題