2012-12-18 27 views
0

我想HTML保存到一個.html文件的字符,UTF-8的fwrite

這是工作:

$html_file = "output.html"; 
$output_string="string with characters like ã or ì"; 
$fileHandle = fopen($html_file, 'w') or die("file could not be accessed/created"); 
fwrite($fileHandle, $output_string); 
fclose($fileHandle); 

當我檢查output.html文件,在這些特殊字符我的output_string沒有被正確讀取。

我的HTML文件不能<head>標籤與字符集信息,這使得它的工作,但我的輸出不能有任何<html><head><body>標籤。像

header('Content-type: text/plain; charset=utf-8'); 

我已經試過的東西,我也試過函數utf8_encode()上的fwrite之前的字符串,但沒有成功爲止。

如果我讀在記事本中output.html文件++或NetBeans IDE中,它顯示被保存正確的字符,這是不是他們讀正確的瀏覽器。

我敢肯定PHP是救了我的使用不正確的字符集文件,因爲如果我在我的電腦與那些特殊字符(甚至無任何字符集設置)創建的HTML文件,這些都是正確讀取。

回答

2

嘗試一個BOM(字節順序標記)添加到您的文件:

$output_string = "\xEF\xBB\xBF"; 
$output_string .= "string with characters like ã or ì"; 
$fileHandle = // ... 
+0

這可能會或可能不會導致更多的問題在不同的情況下,但無論如何爲有限的情況下可能的解決方案+1。 – deceze

+0

繁榮。這工作完美無瑕。將盡快接受。 –

1

是的,PHP正在正確寫入文件,只有讀取程序不知道它是什麼字符編碼,並用錯誤的字符集來解釋數據。如果您不能包含傳達正確字符集的元信息,並且文件格式本身(純文本)沒有提供指定字符集的方法,並且閱讀應用程序無法正確猜測字符集,那麼就沒有解決方案。

0

無論編輯器使用的是寫這代碼必須有設施設置字符類型爲「UTF-8」。

設置字符類型中,你寫了這個代碼的文件。 我正在使用允許從底部更改文件的字符編碼的編輯器。你使用的編輯器必須有類似的東西。

0

如果您需要在UTF-8串不管的PHP腳本文件編碼的(如果它是一個單字節),你應該使用這些字符的UTF-8編碼:

$output_string = "string with characters like \xC3\xA3 or \xC3\x8C";