私は古いクラシックASPサイトで作業していますが、ユーザーがテキストを(複数行のテキストボックスに)入力できるフォームがあり、®(登録商標)のようなhtml文字を追加すると正しく挿入されます。ただし、同じフォームを使用してデータを編集する場合、更新により、登録商標の前にランダムな「Â」(曲折アクセント記号)が追加されます。コンテンツタイプはutf-8です。
何か案は?
あなたがこれを与えるときはいつでもありがとう。それは私を狂わせてきました。-m
私は古いクラシックASPサイトで作業していますが、ユーザーがテキストを(複数行のテキストボックスに)入力できるフォームがあり、®(登録商標)のようなhtml文字を追加すると正しく挿入されます。ただし、同じフォームを使用してデータを編集する場合、更新により、登録商標の前にランダムな「Â」(曲折アクセント記号)が追加されます。コンテンツタイプはutf-8です。
何か案は?
あなたがこれを与えるときはいつでもありがとう。それは私を狂わせてきました。-m
基本的な問題は、フォーム投稿に対する Response.Codepage の影響です。
コンテンツが UTF-8 としてエンコードされていることを指定してフォームをクライアントに送信すると、ブラウザーは、フォーム投稿のコンテンツが UTF-8 としてエンコードされて送信されるべきであると想定します。
これで、投稿を受け取るアクション ページは (やや直感に反して) の値を使用しResponse.Codepage
て、投稿内の文字がどのようにエンコードされているかを通知します。送信するもののエンコーディングを定義するのは送信者の仕事だと考える傾向があるため、これは明らかではありません。また、レスポンスで送信したいもののエンコーディングに関係するプロパティが、最初のリクエストの受信方法に関係があると考えるのは自然な飛躍ではありません。この場合はそうです。
あなたのフォームは UTF-8 でエンコードされたバージョンの文字を投稿していますが、受信したページには Response.Codepage が 65001 (UTF-8 コードページ) に設定されていません。おそらく、1252 のようなシステム OEM コードページに設定されています。したがって、文字の UTF-8 エンコーディングは、2 つの個別の文字として解釈されます。
ASP で適切な文字処理を行うための私の推奨事項は次のとおりです。
ここで重要なことは、ASP ページでフォームの値を読み取る前に、Response.Codepage が送信者のエンコーディングと一致するコードページに設定されていることを確認する必要があることです。これは自動的には行われません。
使用しているエディターはUTF-8で動作せず、すべてをASCIIに変換していると思います。
簡単な答えは、HTMLページでの特殊文字の使用をやめることです。著作権記号は©
またはとして書く必要があります©
。
この正確な問題に関する私の経験から、これらの文字が頻繁に表示されることがわかりました。1) コンテンツが入力されたときに、ユーザーが英語以外の文字セット (およびキーボード) を使用していた (つまり、スペイン語)、2) コンテンツが英語ではないUTF-8 に変換されます。あなたは正しい方向に進んでおり、ヘッダーのコンテンツ タイプをチェックしていますが、これが続く場合は、コンバーターを介してコンテンツを実行する必要があります。この問題は、何年も前にクラシック ASP で何時間もの苦痛を引き起こしました (さらに役立つコードにまだアクセスできればよかったのに)。
® は、UTF-8 として保存されているが ASCII/ISO-8859-1/Windows-1252 として表示されている場合の ® の外観です。タグを使用するmeta
だけでは、ページが UTF-8 として提供されていることを確認するには不十分です。また、Content-Type HTTP ヘッダーでエンコーディングを設定する必要があります。このヘッダーは通常、サーバー全体の設定またはプログラムによって設定されます。
ASPについてはわかりませんが、これはそのヘッダーを設定する方法のようです:
そして、これはいくつかのより多くの情報を提供するかもしれません:
http://technet.microsoft.com/en-us/library/bb742422.aspx#EBAA
データがデータベースに保存されている場合は、データが UTF-8 で保存されているか、保存および取得時に変換されていることも確認する必要があります。