ホームページ >バックエンド開発 >PHPチュートリアル >URL で使用するために PHP 文字列の文字からアクセント記号を削除するにはどうすればよいですか?

URL で使用するために PHP 文字列の文字からアクセント記号を削除するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-12 20:34:02831ブラウズ

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

PHP 文字列内の文字からアクセントを削除する

URL での使用に適した文字列にするために、PHP 文字列内の文字を対応する ASCII 文字に変換する場合、一般的に問題が発生します。文字エンコーディングに関するもの。この問題に対処する方法は次のとおりです:

1.サーバー構成を確認します:

サーバーに iconv が正しく実装されていることを確認します。 PHP の iconv 関数は、「glibc」バージョンではなく、「libiconv」ライブラリに依存します。アクセント付き文字が疑問符に置き換えられるなどの問題が発生した場合は、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',

以上がURL で使用するために PHP 文字列の文字からアクセント記号を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。