猿问

如何从PHP字符串中的字符中删除重音符号?

我正在尝试从PHP字符串中的字符中删除重音符号,作为使字符串在URL中可用的第一步。


我正在使用以下代码:


$input = "Fóø Bår";


setlocale(LC_ALL, "en_US.utf8");

$output = iconv("utf-8", "ascii//TRANSLIT", $input);


print($output);

我期望的输出将是这样的:


F'oo Bar

但是,不是将重音字符音译,而是将它们替换为问号:


F?? B?r

我在网上可以找到的所有内容都表明,设置语言环境将解决此问题,但是我已经这样做了。我已经检查了以下详细信息:


服务器支持我设置的语言环境(包含在产生的列表中locale -a)

服务器的iconv版本(包含在产生的列表中)支持源编码和目标编码(UTF-8和ASCII iconv -l)。

输入字符串是UTF-8编码的(使用PHP mb_check_encoding函数进行了验证,如墨卡托的答案所示)

的调用setlocale成功(返回'en_US.utf8'而不是FALSE)

问题原因:

服务器正在使用错误的iconv实现。它具有glibc版本,而不是必需的libiconv版本。


请注意,某些系统上的iconv功能可能无法按预期工作。在这种情况下,最好安装GNU libiconv库。最终可能会得到更一致的结果。

– PHP手册对iconv的介绍


该phpinfo函数的输出中包含有关PHP使用的iconv实现的详细信息。


(我无法在与此项目一起使用的服务器上使用正确的iconv库重新编译PHP,因此下面我接受的答案是在没有iconv支持的情况下删除重音符号的最有用的答案。)


萧十郎
浏览 525回答 3
3回答

GCT1015

什么WordPress的实现?function remove_accents($string) {    if ( !preg_match('/[\x80-\xff]/', $string) )        return $string;    $chars = array(    // Decompositions for Latin-1 Supplement    chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',    chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',    chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',    chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',    chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',    chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',    chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',    chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',    chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',    chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',    chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',    chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',    chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',    chr(195).chr(159) => 's', chr(195).chr(160) => 'a',    chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',    chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',    chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',    chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',    chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',    chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',    chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',    chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',    chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',    chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',    chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',    chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',    chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',    chr(195).chr(191) => 'y',    // Decompositions for Latin Extended-A    chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',    chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',    chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',    chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',    chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',    chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',    chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',    chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',    chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',    chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',    chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',    chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',    chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',    chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',    chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',    chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',    chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',    chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',    chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',    chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',    chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',    chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',    chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',    chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',    chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',    chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',    chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',    chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',    chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',    chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',    chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',    chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',    chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',    chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',    chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',    chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',    chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',    chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',    chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',    chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',    chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',    chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',    chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',    chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',    chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',    chr(197).chr(154) => 'S',chr(197).chr(155) => 's',    chr(197).chr(156) => 'S',chr(197).chr(157) => 's',    chr(197).chr(158) => 'S',chr(197).chr(159) => 's',    chr(197).chr(160) => 'S', chr(197).chr(161) => 's',    chr(197).chr(162) => 'T', chr(197).chr(163) => 't',    chr(197).chr(164) => 'T', chr(197).chr(165) => 't',    chr(197).chr(166) => 'T', chr(197).chr(167) => 't',    chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',    chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',    chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',    chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',    chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',    chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',    chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',    chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',    chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',    chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',    chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',    chr(197).chr(190) => 'z', chr(197).chr(191) => 's'    );    $string = strtr($string, $chars);    return $string;}为了更好地了解此功能的作用,请在此处检查以下相应的转换表:À => AÁ => A => Aà => AÄ => AÅ => AÇ => CÈ => EÉ => EÊ => EË => EÌ => IÍ => IÎ => IÏ => IÑ => NÒ => OÓ => OÔ => OÕ => OÖ => OÙ => UÚ => UÛ => UÜ => UÝ => Yß => sà => aá => aâ => aã => aä => aå => aç => cè => eé => eê => eë => eì => ií => iî => iï => iñ => nò => oó => oô => oõ => oö => où => uú => uû => uü => uý => yÿ => yĀ => Aā => aĂ => Aă => aĄ => Aą => aĆ => Cć => cĈ => Cĉ => cĊ => Cċ => cČ => Cč => cĎ => Dď => dĐ => Dđ => dĒ => Eē => eĔ => Eĕ => eĖ => Eė => eĘ => Eę => eĚ => Eě => eĜ => Gĝ => gĞ => Gğ => gĠ => Gġ => gĢ => Gģ => gĤ => Hĥ => hĦ => Hħ => hĨ => Iĩ => iĪ => Iī => iĬ => Iĭ => iĮ => Iį => iİ => Iı => iIJ => IJij => ijĴ => Jĵ => jĶ => Kķ => kĸ => kĹ => Lĺ => lĻ => Lļ => lĽ => Lľ => lĿ => Lŀ => lŁ => Lł => lŃ => Nń => nŅ => Nņ => nŇ => Nň => nʼn => NŊ => nŋ => NŌ => Oō => oŎ => Oŏ => oŐ => Oő => oŒ => OEœ => oeŔ => Rŕ => rŖ => Rŗ => rŘ => Rř => rŚ => Sś => sŜ => Sŝ => sŞ => Sş => sŠ => Sš => sŢ => Tţ => tŤ => Tť => tŦ => Tŧ => tŨ => Uũ => uŪ => Uū => uŬ => Uŭ => uŮ => Uů => uŰ => Uű => uŲ => Uų => uŴ => Wŵ => wŶ => Yŷ => yŸ => YŹ => Zź => zŻ => Zż => zŽ => Zž => zſ => s您可以通过简单地遍历$chars函数数组自己生成此convecon表:foreach($chars as $k=>$v) {   printf("%s -> %s", $k, $v);}
随时随地看视频慕课网APP
我要回答