PHP 将非标准标记和特殊字符转换为正常
PHP convert non standard marks and special characters to normal
有没有办法转换像这样的字符:
É É é à Ç etc
还有这种在内置后带有space的感叹号:
!
到他们的正常版本。目前我有这样的代码:
$linesvalue = str_replace(["Ç","ç"],"ç",$linesvalue);
$linesvalue = str_replace(["É","É","é"],"é",$linesvalue);
$linesvalue = str_replace("è","è",$linesvalue);
$linesvalue = str_replace("à","à",$linesvalue);
$linesvalue = str_replace("â","â",$linesvalue);
$linesvalue = str_replace("ê","ê",$linesvalue);
它们看起来像是在用同样的东西替换,但它们肯定不是。无论如何,这还不错,但我发现当我尝试替换感叹号(!)时,它似乎也替换了一些重音字符,如 ü 等。
有没有办法提前将整个文本转换为所有标准字符?
使用 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
有没有办法转换像这样的字符:
É É é à Ç etc
还有这种在内置后带有space的感叹号:
!
到他们的正常版本。目前我有这样的代码:
$linesvalue = str_replace(["Ç","ç"],"ç",$linesvalue);
$linesvalue = str_replace(["É","É","é"],"é",$linesvalue);
$linesvalue = str_replace("è","è",$linesvalue);
$linesvalue = str_replace("à","à",$linesvalue);
$linesvalue = str_replace("â","â",$linesvalue);
$linesvalue = str_replace("ê","ê",$linesvalue);
它们看起来像是在用同样的东西替换,但它们肯定不是。无论如何,这还不错,但我发现当我尝试替换感叹号(!)时,它似乎也替换了一些重音字符,如 ü 等。
有没有办法提前将整个文本转换为所有标准字符?
使用 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