意:我運行的環境是IIS6+PHP5.2php
若是有非ASCII字符保存的格式就爲UTF-8無BOM,全是ASCII字符的話就爲ANSI,不須要手動設置(函數也沒有給出手動設置的參數)。html
測試程序:json
$a = array( "id"=>12, "name"=>"康yong利", "hobby"=>array("a","2","3") );api
file_put_contents(dirname(FILE).'/api.txt',json_encode($a));//ANSI格式函數
file_put_contents(dirname(FILE).'/api1.txt',json_encode($a).'asdf十六大附加..sdf');//UTF-8格式測試
有意思的附加的測試:編碼
到此應該算是結束了,但我想讓全是ASCII字符也保存爲UTF-8的,但設置不了,你只有經過記事本另存爲UTF-8,但這樣會引入BOM,當去除掉BOM再保存(去掉BOM的軟件有不少,我用的是Notepad++),你會發現文件有變成ANSI的了。code
DW4中也存在一樣的現象:htm
創建一個js文件,隨便寫幾個英文字符,保存,你發現文件時ANSI的;當你再寫上幾個中文字符,保存,文件就變成UTF-8無BOM格式的了。get
總結:
把ANSI(帶中文字符)轉換成UTF-8無BOM文件其實很簡單,我的感受沒別人說得那麼複雜,只需兩行,請看(Windows平臺):
$s = iconv('GB2312','UTF-8',file_get_contents(dirname(FILE).'/api.txt')); file_put_contents(dirname(FILE).'/api.txt', $s);
這些都是表象,關鍵仍是對字符編碼、以及各個平臺下的編碼處理方式不瞭解,小菜菜!
PHP 內置函數 file_put_contents用於寫入文件。 file_put_contents 函數最簡單的寫法,能夠只用兩個參數,一個是文件路徑,一個是要寫入的內容,語法以下: file_put_contents(filepath,data) 若是文件不存在,file_put_contents函數會自動建立文件;若是文件已存在,原有文件被重寫。 你能夠利用 file_put_contents函數建立並寫入一個新文件,或者重寫一個原有文件。 下面是一個使用 file_put_contents函數的 PHP 代碼示例:
<html> <body> <?php $path ="C:\\blabla\\filesys\\one.txt"; $content = "one for all"; file_put_contents($path,$content);if (file_exists($path)) {echo "ok";} else {echo "ng";} ?> </body> </html> 該 PHP 代碼示例會建立一個路徑爲 C:\blabla\filesys\one.txt的文件,該文件的內容是 one for all 若是你想在一個已有文件上追加內容,你也可使用file_put_contents函數,只須要加一個參數便可。 file_put_contents(filepath,data,flags) 當 flags 的值爲 FILE_APPEND時,表示在已有文件上追加內容。 好比咱們要在上面示例的C:\blabla\filesys\one.txt文件上追加內容,咱們能夠這樣寫: <html> <body> <?php $path ="C:\\blabla\\filesys\\one.txt"; $content = " all for one"; file_put_contents($path,$content,FILE_APPEND);if (file_exists($path)) {echo "ok";} else {echo "ng";} ?> </body> </html> 執行該 PHP 文件以後,咱們再看 C:\blabla\filesys\one.txt文件,發現文件內容增長了,變成了: one for all all for one file_put_contents函數返回寫入文件的字節數 (number of bytes) ,若是出錯,返回 FALSE。