1. ホーム
  2. php

[解決済み] PHPです。元の文字セットを知らなくても、任意の文字列を UTF-8 に変換する、あるいは少なくとも変換しようとする

2022-04-25 13:59:44

質問

私は世界中のクライアントと取引するアプリケーションを持っています。当然ながら、データベースに入るものはすべてUTF-8でエンコードされたものにしたいのです。

私にとっての主な問題は、文字列のソースがどのようなエンコーディングであるかがわからないことです。 <form accept-charset="utf-8"> は、ユーザーが実際にフォームを送信した場合にのみ有効です)、またはアップロードされたテキストファイルからかもしれないので、私は本当に入力を制御することはできません。

必要なのは、データベースに入るものが、可能な限りUTF-8エンコードされていることを確認する関数またはクラスです。試してみたところ iconv(mb_detect_encoding($text), "UTF-8", $text); が、これには問題があります(入力が 'fiancée' の場合、'fianc' を返します)。いろいろと試してみたのですが =/。

ファイルのアップロードについては、エンドユーザーに使用するエンコードを指定してもらい、出力がどのように見えるかのプレビューを表示するというアイデアが気に入っていますが、これは厄介なハッカーに対する助けにはなりません(実際、彼らの生活を少し楽にすることはできます)。

この件に関する他のSOの質問も読みましたが、どれも"RSSフィードを解析する必要がある"や"ウェブサイトからデータをスクレイピングする"(あるいは、実際に"できない")など微妙に異なるようですね。

しかし、少なくとも良いものを持つものがあるはずです。 試す !

解決方法は?

あなたが求めていることは、非常に難しいことです。可能であれば、ユーザーにエンコードを指定してもらうのが一番です。攻撃を防ぐのは、その方が簡単でも難しくもないはずです。

しかし、こうしてみるのもいいかもしれません。

iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);

strictに設定することで、より良い結果が得られるかもしれません。