首页 >后端开发 >php教程 >如何从 PHP 字符串中的字符中删除重音符号以供 URL 使用?

如何从 PHP 字符串中的字符中删除重音符号以供 URL 使用?

Linda Hamilton
Linda Hamilton原创
2024-11-12 20:34:02831浏览

How do you remove accents from characters in PHP strings for URL use?

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

将 PHP 字符串中的字符转换为其 ASCII 等效项以使字符串适合 URL 使用时,通常会遇到问题与字符编码有关。以下是解决此问题的方法:

1.验证服务器配置:

确认您的服务器具有正确的 iconv 实现。 PHP 的 iconv 函数依赖于“libiconv”库,而不是“glibc”版本。如果遇到重音字符被问号替换等问题,请使用 phpinfo() 函数验证此配置。

2.设置语言环境:

使用 setlocale(LC_ALL, "en_US.utf8") 将语言环境设置为“en_US.utf8”,并确保输入字符串采用 UTF-8 编码。使用 PHP 的 mb_check_encoding() 函数来验证此编码。

3.音译字符:

使用 iconv("utf-8", "ascii//TRANSLIT", $input) 使用“TRANSLIT”音译模式将字符从 UTF-8 音译为 ASCII。这应该会删除重音符号和特殊字符。

4.利用字符串函数:

如果您无法访问 iconv 的“libiconv”实现,您可以使用以下 PHP 字符串操作函数来删除重音符号:

  • strtr( ):将重音字符替换为其非重音等效字符。
  • preg_replace():将重音字符替换为其 ASCII 等效字符。
  • mb_convert_encoding():将字符串从 UTF-8 转换为 ASCII,删除重音符号。

5.自定义函数:

考虑使用自定义函数,如下面所示的 WordPress 实现,它利用字符映射将重音字符转换为纯 ASCII 对应字符:

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',

以上是如何从 PHP 字符串中的字符中删除重音符号以供 URL 使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn