如何编码重音字符

时间:2011-10-03 13:21:56

标签: php utf-8 internationalization diacritics iconv

我正在使用php并从Javascript获取一些utf8字符串。

我尝试通过使用很多差异功能去除重音...但仍然有麻烦...... 使用iconv()我有错误的重音删除,有些编码()我什么都没有......

当我使用serialize(mystring)时,我的错误字符如下所示: xE3xA0,A0取决于char。

我可以使用任何详尽的地图吗? 还有另一种方法吗?

(我在php 5.2下,对服务器没有真正的控制权,所以我不能使用intl / Normalize)


编辑: 像这样的代码不起作用(否则它将是丑陋但短期有效)

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

2 个答案:

答案 0 :(得分:3)

这应该这样做:

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

如果这对您不起作用,请参阅“How do I remove accents from characters in a PHP string?

答案 1 :(得分:0)

对于简单的情况,例如单词或小句子,我总是使用Sjoerd answer,它确实有效。对于更复杂的情况,例如长段和复段段,可能包括一些html,我使用HTMLPurifier library这一组选项

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字符。

P.S。在任何情况下都不要使用preg_replace来执行这类任务,因为你不能在正则表达式中列出所有可能的非ASCII字符(或者更好,你可以,但它很容易出错)。< / p>

P.P.S。这里是a good document on utf-8 encoding以及从HTMLPurifier网站获取的PHP转换。