2

このコードはウェブホストでは機能しますが、ローカルホストでは機能しません。ローカルホスト (Windows を使用) で動作させるにはどうすればよいですか?

ファイル名は「ã¥ã¤ã.html」です。

<?php

$src = 'testing';

$file_name = 'åäö.html';

$fopen=fopen($file_name, 'w');
fwrite($fopen, $src);
fclose($fopen);

?>
4

1 に答える 1

3

MS Windows は、文字エンコードに関する頻繁な問題でよく知られています。あなたの場合、「ウェブホスト」はエンコーディングとして UTF-8 を使用しているように見えますが、ローカルの MS-Windows システムは 8 ビット エンコーディングを使用しています。それは ISO-8859 エンコーディングの可能性がありますが、あまり知られていない Windows コードページ 1251 か、ほぼ ISO エンコーディングではありません。MS-Windows システム内で 3 つの utf 文字が 6 つの文字に「変換」されていることがわかるため、これは可能性が高いと思われます。非 ASCII 文字の典型です。

次の 3 つのオプションがあります。

  1. default_charsetPHP設定を試してみてください。これは、Web サーバーの php インタープリターが使用する php.ini ファイルにあります。
  2. 最近の他のシステムと同じように、MS-Windows システムを内部で UTF-8 エンコーディングを使用するように切り替えます (これは明らかに理にかなっています)。ただし、これは簡単ではありません。特に、既存のシステムを切り替えることは、おそらく良い考えではありません。
  3. 2 つの世界の間で交換するすべての文字列を変換する必要があります。エンコーディングの自動検出は信頼できるものではないため (実際、信頼できるものではないことが証明されています)、特定の変換をコーディングする必要があります。PHP はそのようなルーチンを提供していますが、長い目で見れば面倒です。この場合、php ファイルを転送します。これは、そのようなすべての文字列を手動で変換することを意味します (プログラミング言語は、両方のエンコーディングで「正当な」文字である ASCII 文字のみを使用しますが、string値の場合はそうではありません)。 .

ところで:エンコーディングを簡単に切り替えることができるテキストエディタを使用して、エンコーディングを(切り替えから)少しいじることができます。これは、何が起こっているのかを理解するのに役立ちます。HexEditor は、ファイル内に実際に格納されているものを見つけるための非常に便利なツールです :-)

于 2012-10-15T21:30:17.153 に答える