1

SHIFT_JIS でエンコードされた文字を受け入れ、その結果を電子メールで受信者に送信する必要があるフォームを作成しています。$_POST 変数から結果をキャプチャして、次のようなテキスト ブロックに挿入しようとしました。

$NameJp = $_POST['NameJp'];
$contents = <<<TEST

Name: $NameJp

...
TEST

しかし、それは機能していないようです (これは私を驚かせません)。これは、PHP で非 ASCII 文字を扱う最初の試みであり、人々が何か提案をしてくれることを願っています。おそらく、テキストをエンコードするための単純な関数が不足しています。

また、私が遭遇する可能性のある他の潜在的な落とし穴はありますか?

ありがとう。

4

1 に答える 1

3

また、私が遭遇する可能性のある他の潜在的な落とし穴はありますか?

はい。:)

テキストを SHIFT_JIS で受け取るのは問題ありませんが、その後はずっと SHIFT_JIS のように処理し、このテキストが SHIFT_JIS であることを他の全員に通知する必要があります。つまり、メールに挿入する場合は、このメールに SHIFT_JIS のテキストが含まれていることをクライアントに知らせる適切なメール ヘッダーを設定する必要があります。Web ページまたはデバッグでのみ表示する必要がある場合は、ブラウザーまたはデバッグ環境がテキストを SHIFT_JIS として処理することを確認する必要があります。他のテキストと混合する場合は、それらが同じエンコーディングであることを確認する必要があります。

正直なところ、SHIFT_JIS は時代遅れで扱いがひどいものです。可能であれば、UTF-8 を使用する必要があります。どうしても SHIFT_JIS を受け入れて多くの作業を行う必要がある場合は、内部で UTF-8 に変換し、必要なときに必要な出力エンコーディングに戻すことができます。そのために使用できますiconv

電子メールのヘッダーは、ASCII 文字以外を含めることができないという点で特別です。メールの件名はヘッダーの一部です。非 ASCII 文字を件名として送信するには、 を使用して MIME エンコードする必要がありますmb_encode_mimeheader

また、必須の参照:すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知る必要がある絶対的な最小値 (言い訳はありません!)

于 2010-05-27T02:09:18.360 に答える