Как кодировать акцентированный символ - PullRequest
2 голосов
/ 03 октября 2011

Я использую php и получаю некоторую строку utf8 из Javascript.

Я пытаюсь удалить акцент ... с помощью большого количества разностных функций, но все еще возникают проблемы ... С iconv() Я ошибаюсьудаление акцента, с некоторым encode () у меня ничего нет ...

Когда я использую serialize(mystring), мой неправильный символ выглядит следующим образом: xE3xA0 с A0 в зависимости от символа.

Это тамлюбую исчерпывающую карту, которую я могу использовать?Есть ли другой метод?

(я нахожусь под php 5.2 и у меня нет реального контроля над сервером, поэтому я не могу использовать intl / Normalize)


Редактировать: подобный код не работает (в противном случаеэто было бы некрасиво, но эффективно в краткосрочной перспективе)

 $string = mb_ereg_replace('(À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å)','a',$string);

Ответы [ 2 ]

3 голосов
/ 03 октября 2011

Это должно сделать это:

iconv("UTF-8", "ASCII//TRANSLIT", $text)

Если это не работает для вас, см. « Как удалить акценты из символов в строке PHP? »

0 голосов
/ 10 октября 2011

Для простых случаев, таких как слова или небольшие предложения, я всегда использую Sjoerd answer , и это работает.Для более сложных случаев, таких как длинные и сложные абзацы, возможно, включая некоторые HTML, я использую библиотеку HTMLPurifier с этим набором опций

require_once dirname(__FILE__) . '/htmlpurifier/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'utf-8');
$config->set('Core.EscapeNonASCIICharacters', true);
$config->set('Cache.SerializerPath', sys_get_temp_dir());
$config->set('HTML.Allowed', 'a[href],strong,b,i,p');
$config->set('HTML.TidyLevel', 'heavy');
$purifier = new HTMLPurifier($config);
echo $purifier->purify('òàòààòòààè');

Он заменит любой не ASCII-символ на соответствующийHTML-сущность, таким образом вы избавляетесь от всех проблем с кодированием для таких строк.Например, òàòààòòààè станет àòàòèàòèàòè, что удобно для кодирования, поскольку не содержит символов, не относящихся к ASCII.

PS в любом случае не используйте preg_replace для задач такого рода, этонебезопасно, потому что вы не можете перечислить все возможные не ASCII-символы в регулярном выражении (или, лучше, вы можете, но это довольно подверженная ошибкам задача).

PPS здесь хороший документ по кодировке utf-8 и конвертация в php взята с сайта HTMLPurifier.

...