解決:
$output = '–– € ––';
//written like this php 5 does not understand because it interprets it as single-byte chars.
//so i found the function below to write a multi-byte char in a string.
//unicode version of php's chr()
function uchr ($codes) {
if (is_scalar($codes)) $codes= func_get_args();
$str= '';
foreach ($codes as $code) $str.= html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
return $str;
}
//decimal values of unicode chars: – 8211 - 8211, [space] 32, € 8364,[space] 32, – 8211 - 8211
$output = uchr(8211,8211,32,8364,32,8211,8211);
//or
$output = uchr(8211,8211).' '.uchr(8364).' '.uchr(8211,8211);
echo $output;
質問:
これらの特別な文字を単純なファイルに書き込むにはどうすればよいですか?
$file = "./upload/myfile.txt";
$output = "–– € ––".PHP_EOL; // the "–" is not an underscore _ or - but –
file_put_contents($file, $output);
ブラウザhttp://mydomain.com/upload/myfile.txtからこのファイルにアクセスすると、「�」文字しか表示されません。
ただし、Zend Developerまたはローカルのテキストエディタ(OSX上)で「-€-」を保存してアップロードすると、すべて問題ありません。ブラウザはそれを正しく表示します。
どうすればphpでこれを達成できますか?phpは私のmacbookとは異なるファイルの書き方を使用しているようです。phpの標準はUTF-8だと思い、ローカルのテキストエディタでファイルをUTF-8として保存しました。
追加情報:私が書いたアップロードフォルダにある.htaccessファイルに:
AddDefaultCharset utf-8
AddCharset utf-8 .txt
それ以外の場合、firefoxのfirebugアドオンは、文字セットが指定されていないというメッセージを表示しました。
何か案は?アップロードしたファイルが正しく表示されるため、ファイルの保存と関係があります。
次のようにファイルを保存しながら、さまざまなオプションを試しました。
$output = mb_convert_encoding($output, 'UTF-8', 'OLD-ENCODING');
とphpのiconv関数ですが、解決策が見つかりません。
どんな助けでも大歓迎です。
編集:アップロードしたファイルからコンテンツを取得してエコーすると、次のようになります
$output = file_get_contents('./upload/myuploadedfile.txt',FILE_USE_INCLUDE_PATH);
//it show correctly –– € ––
$output = $output[1]; //it shows a �
$output = $output[3]; //it shows a �
echo $output;