2017-01-05 43 views
1

我正在使用symfony以簡單直接的代碼嘗試更改任何特殊字符,比如äÄöÖüÜ到AöOüU.我嘗試了所有我能找到的用Umlaute替換德國字符爲簡單的拉丁字符php

正規化

echo \Normalizer::normalize("ä"); 

用htmlspecialchars

echo htmlspecialchars("ä"); 

和其他一些solutioin這些都在網上找到的,但他們沒有對我的作品都將輸出

ä 

,而不是

a 

不僅有,但所有我之前提到的其他字符。

我究竟做錯了什麼?還是有其他解決方案來做到這一點。

回答

0

這樣的替換是錯誤的,因爲它會產生錯誤的單詞(相當多的德語單詞只是因爲變音詞的存在而不同......你甚至可以得到一些NSFW結果..)。有更換變音符號的標準,正式規則:

  • A→AE
  • O→OE
  • ü→UE
  • A→閡
  • O→大江
  • U相→Ue的
  • →→(或首都爲SZ)

Normalizer :: normalize(normalizer_normalize)來自您的示例最初來自java,而在PHP中它僅支持從某個版本。你是否意識到你在腳本代碼中輸入了Unicode字符?有一個從手動例如:

<?php 
$char_A_ring = "\xC3\x85"; // 'LATIN CAPITAL LETTER A WITH RING ABOVE' (U+00C5) 
$char_combining_ring_above = "\xCC\x8A"; // 'COMBINING RING ABOVE' (U+030A) 

$char_1 = Normalizer::normalize($char_A_ring, Normalizer::FORM_C); 
$char_2 = Normalizer::normalize('A' . $char_combining_ring_above, Normalizer::FORM_C); 

echo urlencode($char_1); 
echo ' '; 
echo urlencode($char_2); 
?> 

(從http://php.net/manual/en/normalizer.normalize.php

+0

也這一個不工作,因爲我說我已經嘗試過它的結果將保持ä它甚至不會得到一個 –

+0

和chaning你建議的方式是因爲你說更多的「德語」翻譯,但對於搜索引擎等作爲谷歌它會明白它是一個錯別字,特別是如果你將這些添加到URL –

+0

@Yamen Imad Nassif它不會明白,如果這是一種類型,如果你得到不同的字。例如。 shon(已經),schoen(美麗)。至少有兩對替代品是德語中的發誓詞。荷蘭語中更多的sheningans。 – Swift

0

這一個爲我工作再參考

$inputString = "Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,×,Ù,Ú,Û,Ü,Ý,Þ,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,ù,ú,û,ü,ý,þ,ÿ"; 
$extraCharsToRemove = array("\"","'","`","^","~"); 
echo str_replace($extraCharsToRemove,"",iconv("utf-8","ASCII//TRANSLIT",$inputString)); 

失認沽將

A,A,A,A,A,AE,C,E,E,E,E,I,I,I,I,D,N,O,O,O,O,O,x,U,U,U,U,Y,Th,ss,a,a,a,a,a,a,ae,c,e,e,e,e,i,i,i,i,d,n,o,o,o,o,o,u,u,u,u,y,th,y 

檢查iconv瞭解更多信息