Heim >Backend-Entwicklung >PHP-Tutorial >Wie entfernt man Akzente aus Zeichen in PHP-Strings für die URL-Verwendung?

Wie entfernt man Akzente aus Zeichen in PHP-Strings für die URL-Verwendung?

Linda Hamilton
Linda HamiltonOriginal
2024-11-12 20:34:02831Durchsuche

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

Akzente aus Zeichen in PHP-Strings entfernen

Beim Konvertieren von Zeichen in einem PHP-String in ihre ASCII-Entsprechungen, um den String für die URL-Verwendung geeignet zu machen, treten häufig Probleme auf im Zusammenhang mit Zeichenkodierungen. So können Sie dieses Problem angehen:

1. Überprüfen Sie die Serverkonfiguration:

Bestätigen Sie, dass Ihr Server über die korrekte Implementierung von iconv verfügt. Die iconv-Funktion von PHP basiert auf der Bibliothek „libiconv“, nicht auf der Version „glibc“. Wenn Probleme wie das Ersetzen von Akzentzeichen durch Fragezeichen auftreten, überprüfen Sie diese Konfiguration mit der Funktion phpinfo().

2. Legen Sie das Gebietsschema fest:

Verwenden Sie setlocale(LC_ALL, "en_US.utf8"), um das Gebietsschema auf "en_US.utf8" festzulegen und sicherzustellen, dass die Eingabezeichenfolge in UTF-8-Kodierung vorliegt. Verwenden Sie die Funktion mb_check_encoding() von PHP, um diese Codierung zu validieren.

3. Zeichen transliterieren:

Verwenden Sie iconv("utf-8", "ascii//TRANSLIT", $input), um Zeichen von UTF-8 nach ASCII zu transliterieren, indem Sie den Transliterationsmodus „TRANSLIT“ verwenden. Dadurch sollten Akzente und Sonderzeichen entfernt werden.

4. Nutzen Sie String-Funktionen:

Wenn Sie keinen Zugriff auf die „libiconv“-Implementierung von iconv haben, können Sie die folgenden PHP-String-Manipulationsfunktionen verwenden, um Akzente zu entfernen:

  • strtr( ): Ersetzt Zeichen mit Akzent durch ihre Entsprechungen ohne Akzent.
  • preg_replace(): Ersetzt Zeichen mit Akzent durch ihre ASCII-Entsprechungen.
  • mb_convert_encoding(): Konvertiert die Zeichenfolge von UTF-8 in ASCII, Akzente entfernen.

5. Benutzerdefinierte Funktion:

Erwägen Sie die Verwendung einer benutzerdefinierten Funktion wie der unten gezeigten WordPress-Implementierung, die Zeichentabellen verwendet, um Zeichen mit Akzent in ihre einfachen ASCII-Gegenstücke zu übersetzen:

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

Das obige ist der detaillierte Inhalt vonWie entfernt man Akzente aus Zeichen in PHP-Strings für die URL-Verwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn