web-dev-qa-db-ja.com

IIS XMLエンコードが間違っているようです

WebアプリケーションをApache 2.0からIIS 7に移行しています。

すべてがUTF-8エンコーディングで問題ありませんが、1つだけです。

ページにフラッシュムービーがあり、Apacheで提供される場合はフランス語固有の文字(たとえば、é)を正しく表示し、同じコンテンツがIISで提供される場合、xmlコンテンツ(phpによって動的に生成)を読み取ります_ 7これらのキャラクターはめちゃくちゃです。

「うーん、サーバーのエンコーディング」と思った。

さて、スクリプトに次の行を入れます

header('Content-Type: text/xml; charset=utf-8');

何よりも先に。 XMLコンテンツはUTF-8エンコーディングで正しく引用されます:

$str = '<?xml version="1.0" encoding="UTF-8"?>';

基礎となるMySQLデータベースとテーブルのエンコードはutf8-general-ciです。

その後は何も変わりません。XMLがApacheを介して提供される場合、èのような文字は依然として台無しになります。

何が間違っていますか?

4
BerserkEVA

Classic ASPで生成されたXMLでも同じ問題が発生しました。最適な回避策は、XMLファイルのカスタムHTTPハンドラーを作成することでした...

Web.configファイルでできること:

    <handlers>
  <remove name="ASPClassic" />
  <add name="XMLasASPClassic" path="*.xml" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" requireAccess="Script" />
  <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" requireAccess="Script" />
</handlers>

基本的に、.xmlファイルを.aspファイルとして処理します。つまり、<%%>およびすべてのASPコードがそれらで機能します。良い点は、FLashがこれを標準のxmlとして認識し、訪問者がxmlファイルを動的に作成するために使用しているものを把握できないことです。

また、フラッシュが実際のxmlファイルをサポートできることを確認して、最初にスクリプトをテストしてください...

PHPで上記のアプローチを使用できると確信しています... StackOverflowには、さらに詳しい情報があります...

1
Frank