PHP 生成 utf-8 文本文件

林继 PHP 技术 2,280 共写了486个字 (2012-06-17 21:44:48) 没有评论 打印 扫描二维码 百度未收录

正在试着用WP做一个在线阅读的网站,想把网页转换成文本文件以备下载,虽然用 file_put_contents($filename, $content); 很容易实现,只是生成的文本文件在IE下打开会乱码,在FF下倒是正常的。在IE下改变下编码也能正常显示,不过,总是不方便。

我用 $content=iconv("UTF-8","GBK//IGNORE",$content); 把内容先处理成GBK 再写入文件,这样倒是在IE下显示正常了,不过,在平板电脑的傲游下,又是乱码。

只好查询网络,下面这个原因比较靠谱: [参考来源]

我们原来做的只是把文本文件的内容转成utf-8的编码,却没有在写txt文件的时候采用utf-8的记事本的格式进行写文件。

utf-8需要头:初始的三个字节为0xef,0xbb,0xbf;而unicode不需要。这些可以通过自己建txt文档按照相应的编码方式保存,然后用UE打开,察看十六进制的数据可以看得出来的。

所以在写入文件前,如果先写入这三个字节就可以满足IE等的需求。:

  1. <?php 
  2. function post2txt($post_id) { 
  3. $book=get_post($post_id); 
  4. $book_title=strip_tags ($book->post_title); 
  5. $book_content=strip_tags($book->post_content); 
  6. $book_time =strtotime($book->post_date); //获取文章时间 
  7. $filepath = "/wp-content/books/".date("Y",$book_time)."/".date("m",$book_time)."/"; //书籍保存目录 
  8. $filename=$_SERVER['DOCUMENT_ROOT'].$filepath.'book_'.$book->ID.".txt";
  9. //关键前面要加 \xEF\xBB\xBF 这三个字节 
  10. $content="\xEF\xBB\xBF".$book_title."\r\n\r\n".$book_author."\r\n\r\n".$book_content;
  11. file_put_contents($filename, $content); 
  12. }
  13. add_action('save_post','post2txt'); 
  14. ?>

经测试,这三个字节很有效。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >