如何用CGI程序显示中文?

hmaple 2000-09-13 04:52:00
我在UNIX下用C编了一个CGI程序,接收输入到表单的TEXT域里的文字,然后把这些文字显示出来。
我定义了一个char型的数组存放输入的文字,然后用printf生成一个新的页面,并显示输入的文字。但如果输入了中文,再显示出来就全是乱码。如何解决这个问题?
...全文
351 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
  • 打赏
  • 举报
回复
是不是没有定义字符数组的大小,造成缓冲区溢出。

69,373

社区成员

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

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