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