【问题标题】:PHP convert non standard marks and special characters to normalPHP将非标准标记和特殊字符转换为正常
【发布时间】:2018-02-05 13:52:42
【问题描述】:

有没有办法转换如下字符:

É É é à Ç 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);

它们看起来像是在用相同的东西替换,但它们肯定不是。无论如何,这还不错,但是当我尝试替换感叹号(!)时,我发现它似乎也替换了一些重音字符,例如 ü 等。

有没有办法提前将整个文本转换为所有标准字符?

【问题讨论】:

  • 您这样做是因为如果您不这样做,它们会以某种方式损坏吗?
  • 使用normalization form C 来规范化重音等组合标记。表格 KC 应额外将全角字符(如 U+FF01)转换为标准版本。
  • 这听起来很有趣 - 你想把这个作为答案发布吗?不太确定它是如何从您提供的链接中实现的。

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


【解决方案1】:

使用normalization form C 来规范化重音等组合标记。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多