我正在使用php并从Javascript获取一些utf8字符串。
我尝试通过使用很多差异功能去除重音...但仍然有麻烦......
使用iconv()
我有错误的重音删除,有些编码()我什么都没有......
当我使用serialize(mystring)
时,我的错误字符如下所示:
xE3xA0,A0取决于char。
我可以使用任何详尽的地图吗? 还有另一种方法吗?
(我在php 5.2下,对服务器没有真正的控制权,所以我不能使用intl / Normalize)
编辑: 像这样的代码不起作用(否则它将是丑陋但短期有效)
$string = mb_ereg_replace('(À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å)','a',$string);
答案 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转换。