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);
Они выглядят так, как будто заменяют собой одно и то же, но, безусловно, нет. В любом случае, это не так уж плохо, но я нахожу, что когда я пытаюсь заменить восклицательный знак (!), в частности, он также заменяет некоторые акцентированные символы, такие как ü и подобные.
Есть ли способ преобразовать весь текст заранее, чтобы это были все стандартные символы?
1 ответ
Решение
Используйте форму нормализации 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