Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda mengalih keluar aksen daripada aksara dalam rentetan PHP untuk kegunaan URL?

Bagaimanakah anda mengalih keluar aksen daripada aksara dalam rentetan PHP untuk kegunaan URL?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 20:34:02773semak imbas

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

Mengalih keluar Aksen daripada Aksara dalam Rentetan PHP

Apabila menukar aksara dalam rentetan PHP kepada setara ASCII untuk menjadikan rentetan itu sesuai untuk kegunaan URL, adalah perkara biasa untuk menghadapi masalah berkaitan dengan pengekodan aksara. Begini cara untuk menangani isu ini:

1. Sahkan Konfigurasi Pelayan:

Sahkan bahawa pelayan anda mempunyai pelaksanaan iconv yang betul. Fungsi iconv PHP bergantung pada perpustakaan "libiconv", bukan versi "glibc". Jika anda menghadapi masalah seperti aksara beraksen digantikan dengan tanda soal, sahkan konfigurasi ini menggunakan fungsi phpinfo().

2. Tetapkan Tempatan:

Gunakan setlocale(LC_ALL, "en_US.utf8") untuk menetapkan tempattempat kepada "en_US.utf8" dan pastikan rentetan input berada dalam pengekodan UTF-8. Gunakan fungsi mb_check_encoding() PHP untuk mengesahkan pengekodan ini.

3. Alih Huruf:

Gunakan iconv("utf-8", "ascii//TRANSLIT", $input) untuk mengalih huruf daripada UTF-8 kepada ASCII menggunakan mod transliterasi "TRANSLIT". Ini sepatutnya mengalih keluar aksen dan aksara khas.

4. Gunakan Fungsi Rentetan:

Jika anda tidak mempunyai akses kepada pelaksanaan "libiconv" iconv, anda boleh menggunakan fungsi manipulasi rentetan PHP berikut untuk mengalih keluar aksen:

  • strtr( ): Menggantikan aksara beraksen dengan aksara yang tidak beraksen setara.
  • preg_replace(): Menggantikan aksara beraksen dengan setara ASCIInya.
  • mb_convert_encoding(): Menukar rentetan daripada UTF-8 kepada ASCII, mengalih keluar aksen.

5. Fungsi Tersuai:

Pertimbangkan untuk menggunakan fungsi tersuai seperti pelaksanaan WordPress yang ditunjukkan di bawah, yang menggunakan peta aksara untuk menterjemah aksara beraksen kepada rakan ASCII biasa mereka:

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

Atas ialah kandungan terperinci Bagaimanakah anda mengalih keluar aksen daripada aksara dalam rentetan PHP untuk kegunaan URL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn