0

有沒有辦法把字符轉換,如:PHP將非標標誌和特殊字符正常

É É é à Ç etc 

而且這種類型的驚歎號與空間它建於後:

到他們的正常版本。目前,我有這樣的代碼:

$linesvalue = str_replace(["Ç","ç"],"ç",$linesvalue); 
$linesvalue = str_replace(["É","É","é"],"é",$linesvalue); 
$linesvalue = str_replace("è","è",$linesvalue); 
$linesvalue = str_replace("à","à",$linesvalue); 
$linesvalue = str_replace("â","â",$linesvalue); 
$linesvalue = str_replace("ê","ê",$linesvalue); 

他們看起來像他們有同樣的事情更換,但他們肯定不是。無論如何,這不是太糟糕,但我發現當我試圖替換感嘆號(!),特別是它似乎也取代了一些重音字符,如ü等。

有沒有辦法將全文提前轉換爲所有標準字符?

+0

因爲他們似乎在某種程度上打破,如果你沒有你這樣做呢? – Qirel

+0

使用[規範化表單](http://php.net/manual/en/class.normalizer.php)C來標準化組合標記,如重音。 Form KC應另外將全角字符(如U + FF01)轉換爲標準版本。 – nwellnhof

+0

這聽起來很有趣 - 你想發佈這個答案嗎?不太確定它究竟是如何從您給出的鏈接執行的。 – Hasen

回答

1

使用normalization form C來標準化組合標記,如重音。 Form KC還將全角字符(如U + FF01)轉換爲標準版本。

例子:

<?php 
$string = "É É é à Ç !"; 
print "before: $string\n"; 
print "hex: " . unpack("H*", $string)[1] . "\n"; 
$string = Normalizer::normalize($string, Normalizer::FORM_KC); 
print "after: $string\n"; 
print "hex: " . unpack("H*", $string)[1] . "\n"; 

輸出:

before: É É é à Ç ! 
hex: c3892045cc812065cc812061cc802043cca720efbc81 
after: É É é à Ç ! 
hex: c38920c38920c3a920c3a020c3872021