喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: 请教数据库中取出word文件碰到的问题  
 
dream888
新手上路
Rank: 1



UID 80235
精华 0
积分 27
帖子 29
金钱 27 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-9-18
状态 离线
请教数据库中取出word文件碰到的问题

问题是下载下来的word文件内容是乱码.
数据库中
create table fileword (
filewordid int(10) unsigned not null auto_increment primary key,
filename char(60) binary not null,
filedata longblob not null
);

数据已经存进去了,通过
header("Content-type:application/msword");
    header("Content-Disposition: attachment; filename=$filename");
echo $file;
下载word文件,测试了一下如果上传的是txt文本文件(用记事本输入的)的话下载后可以正常显示,没有乱码,但如果上传的是word格式的doc文件时,下载后显示的却是乱码.

使用word格式的doc文件保存后,里面不单单是中文的文本内容了,不知道是不是因为这个原因导致编码问题而造成的?应该用什么步骤去尝试解决呢?


数据库中其他char的普通的中文数据在显示和like中,都非常准确,没有问题

以下是数据库中编码的设置
mysql> show varibiables like 'character';

+--------------------------+---------------------------------------+
| Variable_name            | Value                                 |
+--------------------------+---------------------------------------+
| character_set_client     | latin1                                |
| character_set_connection | latin1                                |
| character_set_database   | latin1                                |
| character_set_filesystem | binary                                |
| character_set_results    | latin1                                |
| character_set_server     | latin1                                |
| character_set_system     | utf8                                  |
| character_sets_dir       | E:\APM-Express\mysql5\share\charsets\ |
+--------------------------+---------------------------------------+


mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

各位有经验的帮忙想想办法
2007-10-18 09:39 AM#1
查看资料  发短消息  顶部
 
蟋蟀
版主
Rank: 7Rank: 7Rank: 7
村里巡逻队长


UID 67242
精华 0
积分 2035
帖子 1762
金钱 2035 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2005-12-17
来自 福建
状态 离线
[推荐阅读] 未成年人禁止入内!
不知道你程序文件本身是什么编码的 download.php是编码的,如何是utf-8的话,你echo出来的数据就是utf-8的
这样生成文件的编码就是utf-8的,还有你header("content-type:application/octed-stream");用二进制形式会更好
而且对于下载这样操作文件比较多,为了取消php对文件信息的缓存影响最好加上clearstatcache函数




吉林php群
27089230
2007-10-18 03:24 PM#2
查看资料  Blog  发短消息  QQ  顶部
 
dream888
新手上路
Rank: 1



UID 80235
精华 0
积分 27
帖子 29
金钱 27 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-9-18
状态 离线
[推荐阅读] MYSQL比较字符串错误
嗯,不愧是版主大人,让小弟深受启发,我先研究一下,然后再来汇报
2007-10-18 08:51 PM#3
查看资料  发短消息  顶部
 
dream888
新手上路
Rank: 1



UID 80235
精华 0
积分 27
帖子 29
金钱 27 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-9-18
状态 离线
[推荐阅读] MYSQL比较字符串错误。。。
原来的文件编码并非utf8的,后来想到和原到的文件作个对比看看,终于搞清楚原因了.
下载了个十六进制编辑器打开和原来文件作了一下对比,原来并非编码的问题,各位请看:
D0 CF 11 E0 A1 B1 1A E1 这是完好的word文件的前几个字节,应该是用来标别word文档的标志的.
从数据库中出来,然后通过网页下载下来的word文件的头部是:
0D 0A D0 CF 11 E0 A1 B1 1A E1

多了0D 0A,而0D 0A是windows下换行的处理方式,想到我的download.php其中有require文件,然后查了一下这些文件,发现未尾多了二行,去掉之后,然后再下载,就可以正常打开了,昨天在家里没有问题也是因为测试时没有调用其它文件,直接写代码了.

后来又改mysql的编码设置试试,发现并不会影响到,所以是require调用的文件开头和未尾有多余的空行,也就是<?php前,和?>之后,但是为什么require或者include的功能不是单单引用文件内容,而在输出这个层次上也有所动作,难道是php设计的缺陷,这个是为什么?
2007-10-19 09:47 AM#4
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.046584 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP