Maison  >  Article  >  développement back-end  >  Comment supprimer les accents des caractères dans les chaînes PHP pour l'utilisation d'URL ?

Comment supprimer les accents des caractères dans les chaînes PHP pour l'utilisation d'URL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 20:34:02771parcourir

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

Suppression des accents des caractères dans les chaînes PHP

Lors de la conversion des caractères d'une chaîne PHP en leurs équivalents ASCII pour rendre la chaîne adaptée à l'utilisation d'une URL, il est courant de rencontrer des problèmes liés aux encodages de caractères. Voici comment résoudre ce problème :

1. Vérifiez la configuration du serveur :

Confirmez que votre serveur dispose de la bonne implémentation d'iconv. La fonction iconv de PHP repose sur la bibliothèque "libiconv", pas sur la version "glibc". Si vous rencontrez des problèmes tels que le remplacement des caractères accentués par des points d'interrogation, vérifiez cette configuration à l'aide de la fonction phpinfo().

2. Définissez les paramètres régionaux :

Utilisez setlocale(LC_ALL, "en_US.utf8") pour définir les paramètres régionaux sur "en_US.utf8" et assurez-vous que la chaîne d'entrée est en codage UTF-8. Utilisez la fonction mb_check_encoding() de PHP pour valider cet encodage.

3. Translittérer des caractères :

Utilisez iconv("utf-8", "ascii//TRANSLIT", $input) pour translittérer des caractères d'UTF-8 en ASCII en utilisant le mode de translittération "TRANSLIT". Cela devrait supprimer les accents et les caractères spéciaux.

4. Utiliser les fonctions de chaîne :

Si vous n'avez pas accès à l'implémentation "libiconv" d'iconv, vous pouvez utiliser les fonctions de manipulation de chaîne PHP suivantes pour supprimer les accents :

  • strtr( ) : remplace les caractères accentués par leurs équivalents non accentués.
  • preg_replace() : remplace les caractères accentués par leur ASCII équivalents.
  • mb_convert_encoding() : convertit la chaîne de UTF-8 en ASCII, en supprimant les accents.

5. Fonction personnalisée :

Envisagez d'utiliser une fonction personnalisée comme l'implémentation WordPress présentée ci-dessous, qui utilise des cartes de caractères pour traduire les caractères accentués en leurs homologues ASCII simples :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn