如何用CGI程序显示中文?

hmaple 2000-09-13 04:52:00
我在UNIX下用C编了一个CGI程序,接收输入到表单的TEXT域里的文字,然后把这些文字显示出来。
我定义了一个char型的数组存放输入的文字,然后用printf生成一个新的页面,并显示输入的文字。但如果输入了中文,再显示出来就全是乱码。如何解决这个问题?
...全文
349 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
partime 2000-09-15
  • 打赏
  • 举报
回复
输出页面前用<meta >标签指定语言就可以了
我的CGI全用的这种方式,中文显示正常,没有乱码
<meta charset='gb2312'>
hmaple 2000-09-15
  • 打赏
  • 举报
回复
不是。
我限定了TEXT域的最大长度,然后定义了足够用的数组,把输入的文字填入数组后,再加上一个NULL。然后用printf("%s",...)来输出字符串。
partime 2000-09-15
  • 打赏
  • 举报
回复
这是因为汉字为非ASCII码
在http传输时被URL编码了
用%XX表示与0xXX对应的字节
即成为了%[(0-9,A-F)(0-9,A-F)]这样的字符串
你在cgi中需要将该编码字符串还原
具体做法是在串中查找类似的子串
并转换为原二进制字节0xXX
在Perl中实现很简单,有pack函数。
在C/C++中只好自己实现了
我原来做过C/C++的URL解码代码
那是好几年前了
现在一时也找不到,但原理是没问题的
hmaple 2000-09-15
  • 打赏
  • 举报
回复
不行,我已经在加上<meta http-equiv="Content-Type" content="text/html; charset=gb2312">了!
我的页面是这样的:
<FORM ACTION="/cgi-bin/register.cgi" METHOD="POST">
Your name:<INPUT TYPE="text" NAME="username" MAXLENGTH="10">
<INPUT TYPE="submit" VALUE="Submit"><INPUT TYPE="reset" VALUE"Reset"
</FORM> char * length;

用来测试的CGI程序是这样实现的:
char buf[255];
length=getenv("CONTENT_LENGTH");
len=atoi(length);
for(i=0;i<len;i++)
buf[i]=getc(stdin);
buf[i]=NULL;
...//输出HTML头(略)
printf("the buf is %s",buf);
...//输出HTML尾(略)

是不是不该用getc()来读数据?
我在加20分!!
wwwunix 2000-09-14
  • 打赏
  • 举报
回复
是不是没有定义字符数组的大小,造成缓冲区溢出。
1:全能的HTML输出 2:全部模板化输出(可以更好的结合自已的主页) 3:可自定议文件名及文件扩展名 4:仿新浪新闻的目录存入方式(让你感到有面子) 5:管理中心非法登陆自动记录(可以在线清空记录) 6:方便的搜索方式(搜索代码加到任何一个网页都会自动更新类别显示) 7:在线添加类别,修改类别(同时可以选择类别模板和修改已选好的类别模板); 8:在线添加新闻; 9:可以设定图片新闻(可设定显示数及图片的宽和高) 10:可以设定焦点新闻(可设定显示数) 11:自动记录最新新闻(可设定显示数) 12:自动记录相关新闻(可设定显示数) 13:WM标签让你在加新闻时得心应手 14:在线修改新闻(修改后自动更新相关页面); 15:在线删除新闻 16:在线批量删除新闻(可以同时删除一天,一月,一年的新闻) 17:自由上传图片及FLASH 18:可设定上传文件的最大字节数 19:在线删除上传的图片及FLASH 20:管理员可设定多位用户管理新闻 21:在线增加或删除用户 22:用户发表的新闻可以自已删除和修改 23:一位用户可以管理多个类别 24:一个类别可以由多位用户管理(且只能删除和修改自已发的新闻) 25:投稿功能 26:在线管理投稿箱 27:可以对投稿者自动发信回信(该功能可以设定开或关) 28:自动检查新闻内容里是否有图片(有则在标题后加标志) 29:标题后面的图片标志可自设 30:标题前面的标志可以自设 31:在调用总类别的新闻时可以设定是否显示所在分类别 32:可以设定调用新闻时的标题字节数 33:Server(服务器)时区调整 34:可设定每页显示标题数 35:可以设定在标题后的时间显示方式或不显示时间 36:在线修改程序变量 功能预告: 在线管理模板 多功能详细的搜索新闻 在线评论 在线邮件推荐新闻 在线手机短信推荐新闻 ########################################################################################## 按装说明 1:打开压缩包,有CGI-BIN,NON-CGI,及本说明文件,CGI-BIN和NON-CGI里面的目录和文件请不要改名。 2:查看install.cgi,admin.cgi,serach,wmnewsupfile.cgi文件的第一行Perl 解释器路(#!/usr/bin/perl),如果跟你服务器的不相同请修改(一般情况下不用修改的.) 3:按提供时的目录上传所有的目录及文件,主要是CGI-BIN和NON-CGI这两个目录要全部上传,所有CGI和PL文件一定要用ASCii方式上传到CGI-BIN目录里;而非 CGI 文件(图片)要用 Binary 方式上传;建议采用CUTEFTP上传所有文件。 4:上传完所有文件和目录后请修改CGI-BIN里的所有目录属为777,CGI和PL文件的属性为755,NON-CGI目录为777,如果你使用的是 Windows 类服务器,那么无需做任何属性的设置。 5:在浏览器里打开install.cgi程序安装向导,安照提示进行安装。 6:进入管理中心在"程序变量管理"查看其它功能,按照自己的要求修改后保存。 7:添加了类别后就可以发表新闻了。 ps:如果主机是NT类的话,在安装不成功的情况下打开*.cgi文件在说明要改绝对路径的地方修改成你服务器的绝对路径! ########################################################################################## 增加模板时请注意:由于大家要得急,暂时在管理中心没有完成这个功能,这就要求大家在增加模板时注意以下几个方面; 1:模板的扩展名一定得是.html 2:模板主名可以是任意的(英文,汉字都可以) 3:一定要传到相应的目录里,(list:是类别模板;news:是新闻显示时的模板;) 4:搜索模板只能是一个,而且不能改名,一定要记得噢!
《WEB程序设计》复习答疑 1、当前主要的WEB数据库访问技术有哪些? 答:到目前为止,WEB数据库访问技术主要分为两大类: (1)公共网关接口技术(CGI); CGI是WEB服务器运行时外部程序的规范,按照CGI编写的程序可以扩展服务器的功能,完成服务器不能完成的工作,外部程序执行时可以生成HTML文档,并将文档返回WEB服务器。 (2)服务器端脚本编程技术。 当前较为流行的几种有代表性的服务器端脚本编程技术是ASP、PHP、JSP。 2、HTML是什么?简述它的基本结构。 答:HTML(Hypertext Marked Language,超文本标记语言)是一种用来制作WEB上超文本文档的简单标记语言。 对于大多数WEB页面来说,都具有如下所示的基本结构: ……标题内容…… ……主体内容…… 6、什么是静态网页?什么是动态网页? 答:所谓静态网页,指的是网页从服务器传到客户端时,网页的内容是“固定不变”的,也就是说,服务器只是把所存储的网页的内容原封不动直接传递给客户端浏览器,这种网页一般是标准的HTML代码。 所谓动态网页,它在由服务器传递给客户端的时候必须由服务器把它转换成相应的HTML格式,而且会根据用户的要求和选择在服务器端做出相应的改变和响应。 7、简要说明在网页中插入JavaSCRIPT脚本的几种方式? 在网页中插入脚本语言通常有三种方式:使用SCRIPT标记符、在标记符中直接嵌入脚本以及链接外部脚本文件. 8、说明在网页中使用CSS的几种方式?CSS选择符的作用及分类? 在网页中使用CSS包括三种常用方式:将样式定义直接嵌入到标记符中、将样式定义嵌入到网页中以及将样式定义包含在外部CSS样式文件中. CSS(Cascading Style Sheet,层叠样式表)技术是一种格式化网页的标准方式,它扩展了HTML的功能,使网页设计者能够以更有效的方式设置网页格式. 常用的5种selector:HTML标记符、具有上下文关系的HTML标记符、用户定义的类、用户定义的ID、虚类. 9、设置字体大小的代码是? A) B) C) D) 16、创建一个单选框的HTML代码是() A) B) C) D) 17、HTML代码 表示? A)创建一个超链接 B)创建一个自动发送电子邮件的链接 C)创建一个位于文档内部的靶位 D)创建一个指向位于文档内部靶位的链接 18、HTML代码表示? A)创建一个表格 B)开始表格中的每一行 C)开始一行中的每一个格子 D)设置表格头 19、HTML代码
表示? A)添加一个图象 B)排列对齐一个图象 C)设置围绕一个图像的边框的大小 D)加入一条水平线 20、网页制作三剑客是指? A)FRONTPAGE、PHOTOSHOP、JAVA B)DREAMWEAVER、PHOTOSHOP、Flash C)FRONTPAGE、FIREWORK、Flash D)DREAMWEAVER、FIREWORK、Flash 22、HTML代码表示? A)创建一个表格 B)开始表格中的每一行 C)开始一行中的每一个格子 D)设置表格头 23、创建表单的HTML代码是? A)
B) C)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧