[解決済み] PHP の文字列からアクセント記号を取り除くにはどうしたらよいですか?
2022-11-04 17:31:26
質問
PHPの文字列をURLで使用できるようにするための最初のステップとして、文字からアクセント記号を除去しようとしています。
私は以下のコードを使用しています。
$input = "Fóø Bår";
setlocale(LC_ALL, "en_US.utf8");
$output = iconv("utf-8", "ascii//TRANSLIT", $input);
print($output);
期待する出力は次のようなものです。
F'oo Bar
ただし、アクセント記号は音訳されるのではなく、クエスチョンマークに置き換わります。
F?? B?r
ネットで調べたところ、ロケールを設定すればこの問題が解決するようですが、私はすでにこれを実行しています。 私は以下の詳細を確認済みです。
-
私が設定しているロケールはサーバーでサポートされています (以下の方法で生成されたリストに含まれています。
locale -a
) -
ソースとターゲットのエンコーディング (UTF-8 と ASCII) は、サーバーのバージョンの iconv でサポートされています (このリストは
iconv -l
) -
入力文字列は UTF-8 でエンコードされています (PHP の
mb_check_encoding
関数で検証されています。 mercatorの回答 ) -
の呼び出しは
setlocale
の呼び出しが成功した場合 (これは'en_US.utf8'
ではなくFALSE
)
問題の原因
サーバーが iconv の間違った実装を使用しています。 これには glibc バージョンではなく、必要な libiconv バージョンに変更してください。
システムによってはiconv関数が期待通りに動作しないことがあることに注意してください。そのような場合は、GNU libiconv ライブラリをインストールするのがよいでしょう。その方が、より一貫した結果を得られる可能性が高いです。
- PHPマニュアルのiconvの紹介
PHP で使用される iconv の実装についての詳細は
phpinfo
関数の出力に含まれます。
(私はこのプロジェクトのために働いているサーバーで正しいiconvライブラリでPHPを再コンパイルすることができないので、私が以下で受け入れた答えはiconvサポートなしでアクセントを取り除くために最も有用だったものです)。
どのように解決するのですか?
この問題は、あなたのエンコーディングが ä と å を 'a' とは異なるシンボルとみなしていることだと思います。実際、PHPのstrtrのドキュメントには、醜い方法でアクセントを除去するサンプルがあります :(
関連
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] YouTube APIからYouTubeビデオのサムネイルを取得する方法を教えてください。
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPランダム文字列ジェネレータ
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。