PHP将非标准标记和特殊字符转换为普通标记

时间:2017-08-28 10:07:40

标签: php unicode encoding character-encoding unicode-normalization

有没有办法转换像:

这样的字符
É É é à Ç 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);

他们看起来像是在替换同样的东西,但他们当然不是。无论如何,这不是太糟糕但我发现当我尝试更换感叹号(!)时,它似乎也会替换一些重音字符,如ü等。

有没有办法提前转换整个文本所以它只是所有标准字符?

1 个答案:

答案 0 :(得分: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