首頁 >後端開發 >php教程 >如何從 PHP 字串中的字元中刪除重音符號以供 URL 使用?

如何從 PHP 字串中的字元中刪除重音符號以供 URL 使用?

Linda Hamilton
Linda Hamilton原創
2024-11-12 20:34:02835瀏覽

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