boa-0.94.13:CGI中文问题

2023-05-16

为什么中文乱码

         win7自带的浏览器ie打开服务器的cgi_form.html,在Name输入框输入“汉字”两个字,提交服务器。如图1

1

         返回的是结果为:

                       Server Got you parametes! Right!? ^_^

                       Name : %BA%BA%D7%D6

                       Email :

                       Message :

         经过查看页面编码(方法:鼠标右键->编码),IE自动选择GB2312编码,即简体中文编码。通过修改页面编码(方法:鼠标右键->编码->Unicode(UTF8)),再次输入“汉字”提交,结果为:

                       Server Got you parametes! Right!? ^_^

                       Name : %E6%B1%89%E5%AD%97

                       Email :

                       Message :

         GB2312编码汉字,一个汉字使用2个字节编码,UTF8编码汉字则用3个字节。这就是同样提交的参数为“汉字”,但是不同页面编码的返回结果有所区别。红色字体部分百分号是非ASCII码的URL编码规则,百分号后面是16进制数。

         但是一般用户不会理解这些乱起八糟的编码,用户只认识汉字。如何能让人类直观看到提交的参数呢?

       第一,  编辑页面的时候,指定页面的编码类型;

       第二,  CGI程序生成结果的时候,也指明编码类型;

       第三,  CGI程序与form页面保持一致的编码格式。

GB2312测试

         cgi_form.html基础上修改页面,指定页面编码格式:

         <meta http-equiv="content-type"content="text/html;charset=gb2312" />

         同时NameEmailMessage替换为中文,实际效果如图2

2

         因为要将页面汉字编码为GB2312编码,因此如果没能正确修改cgi_form.html达到上图效果的,请下载cgi_form_gb2312.html

         对应的cgi程序这里为了得到url编码中的参数,引入了另一个脚本urldecode.sh。   cgi_form_gb2312.sh内容如下:

                                    #!/bin/sh

                                    eval `./proccgi.sh $*`

                                    param_name=`echo $FORM_name |./urldecode.sh`

                                    param_email=`echo $FORM_email |./urldecode.sh`

                                    param_msg=`echo $FORM_msg |./urldecode.sh`

                                   

                                    thisName=`echo -e '\xD0\xD5\xC3\xFB'`

                                    thisEmail=`echo -e '\xD3\xCA\xCF\xE4'`

                                    thisMsg=`echo -e '\xD0\xC5\xCF\xA2'`

                                   

                                    echo"Content-type:text/html;charset=gb2312"

                                    echo ""

                                    echo "<html>"

                                    echo "<head><title>CGIGB2312</title></head>"

                                    echo "<body>"

                                    echo "<h2>Server Got youparametes! Right!? ^_^</h2>"

                                    echo "<h2>$thisName:$param_name </h2>"

                                    echo "<h2>$thisEmail:$param_email </h2>"

                                    echo "<h2>$thisMsg:$param_msg </h2>"

                                    echo "</body>"

                                    echo "</html>"

         具体运行效果如图3

3

        

UTF-8测试

         GB2312测试一样,要改编cgi_form.html

         <meta http-equiv="content-type"content="text/html;charset=utf-8" />

         为了方便,这里提供下载测试 cgi_form_utf8.html

         CGI程序,同样要引入urldecode.sh进行URL参数解码。因为urldecode.sh已提供下载,这里只给出对应的CGI程序,cgi_form_utf8.sh

                                    #!/bin/sh

                                    eval `./proccgi.sh $*`

                                    param_name=`echo $FORM_name |./urldecode.sh`

                                    param_email=`echo $FORM_email |./urldecode.sh`

                                    param_msg=`echo $FORM_msg |./urldecode.sh`

                                   

                                    thisName=`echo -e '\xE5\xA7\x93\xE5\x90\x8D'`

                                    thisEmail=`echo -e '\xE9\x82\xAE\xE7\xAE\xB1'`

                                    thisMsg=`echo -e '\xE4\xBF\xA1\xE6\x81\xAF'`

 

                                    echo"Content-type:text/html;charset=utf-8"

                                    echo ""

                                    echo "<html>"

                                    echo "<head><title>CGIUTF-8</title></head>"

                                    echo "<body>"

                                    echo "<h2>Server Got youparametes! Right!? ^_^</h2>"

                                    echo "<h2>$thisName:$param_name </h2>"

                                    echo "<h2>$thisEmail:$param_email </h2>"

                                    echo "<h2>$thisMsg:$param_msg </h2>"

                                    echo "</body>"

                                    echo "</html>"

         具体运行效果如图4

4

总结

         通过以上2个实验,理解了汉字编码,浏览器页面编码,CGI程序产生指定的编码页面的技术细节,3者要统一起来就能够解决汉字乱码问题。

         同时一个完整的CGI程序不管用何种编程语言实现,都要具有解析URL参数能力,还有具备将百分号+16进制数参数转化为人类可识别参数的能力。如果参数不回传给浏览器,而是作为后台数据库查询条件的话的,还会涉及后台数据库存储的数据格式问题。这就不再本文范围内描述。

         文中重要部分已经红色标示,重点理解这些差异。如果彻底理解这2个例子,以后遇到汉字乱码问题就可以避免了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boa-0.94.13:CGI中文问题 的相关文章

  • 如何通过ajax向Perl脚本发送数据?

    我想通过 ajax 将数据发送到 Perl 脚本 并从它接收 json 格式 但这不起作用 我知道以下脚本中有问题 有谁知道如何修理它 jQuery 代码 test click function var ID 100 var data da
  • 返回 Python CGI MySQL 脚本的输出

    我对 Python 和 MySQL 非常陌生 这是我的第一个 Stack 问题 所以 如果我遗漏了一些明显的东西 请提前道歉 但是 在提问之前我确实尝试过研究一下 我正在尝试学习 Python MySQL 和 CGI 脚本编写的基础知识 为
  • Web 服务器的 .cgi 问题

    The code usr bin env python import MySQLdb print Content Type text html print print print print h1 Books h1 print ul con
  • Python CGI os.system 导致标头格式错误

    我正在运行 Apache 2 4 10 Raspbian 并且我正在使用 python 作为 CGI 但是当我尝试在简单代码中使用 os system 时 我收到此格式错误的标头错误 Wed Aug 31 17 10 05 715740 2
  • web.config IIS 中的 PHP(或其他)CGI 配置

    我最近开发了一个 Web 应用程序的安装程序 是的 带有安装程序的 Web 应用程序 使用维克斯工具套装 http wixtoolset org 该向导引导用户获取站点安装所需的所有基本信息 如下所示 在安装结束时使用自定义操作 我使用动态
  • 如何对 Perl Web 服务实施服务器端速率限制?

    我有一个基于 Perl 的 CGI Fast CGI Web 服务 并且希望通过 IP 地址对客户端进行速率限制 以阻止激进的客户端造成过多的工作 我四处寻找一些代码并发现算法 TokenBucket http search cpan or
  • 如何在Python中读取cookie

    我是 python cgi 脚本的新手 我想用Python读取cookie 我尝试了以下代码 from urllib2 import Request build opener HTTPCookieProcessor HTTPHandler
  • 我正在用 C 搜索 cgi 库来构建一个安静的 Web 服务

    我想构建一个安静的 CoAP Web 服务 它可以执行 C 代码来处理事件 因此我正在搜索一个lib 它为我提供了C和cgi中的rest api 类似于 遗憾的是 restcgi 是用 c 编写的 而 CGI Simple 是用 perl
  • 在 Perl 中,如何在命令行上发送 CGI 参数?

    通常我从网页获取数据 但我想从命令行发送它以方便调试 为了获取数据我做了类似的事情 my query new CGI my username query gt param the username 这似乎不起作用 script pl the
  • 如何在 Perl CGI 脚本中生成长时间运行的进程?

    我现在正在编写一个 Perl CGI 脚本 但它正在成为资源消耗者 并且它不断被我的 Web 主机杀死 因为我不断达到进程内存限制 我想知道是否有一种方法可以将我的脚本拆分为多个脚本 然后让第一个脚本调用下一个脚本 然后退出 这样整个脚本就
  • 通过 jQuery AJAX 将数据发布到 Python CGI 脚本

    我正在尝试设置一个简单的脚本 其中使用 jQuery ajax 函数将一些数据发送到 Python CGI 脚本 Python 脚本只会将发布到其中的数据设为大写 然后将该数据返回到 HTML 文件 其中 div 将使用内容进行更新 我有如
  • 解封时出现属性错误:无法获取属性“位置”

    我正在为库存系统编写 Python CGI 脚本 需要通过存储pickle一个列表 称为locations 的对象 这是我正在使用的代码 try with open config autosave bin rb as dataFile lo
  • 捕获 python cgi 脚本后面的 url 路径?

    如果我举个例子来解释我的问题会更好 cgi 脚本的文件名 awesome URL http omgpython com awesome http omgpython com awesome awesome 脚本正常运行 我附加了一个 假 路
  • 如何使用cgi python脚本在浏览器中显示pdf文件内容及其全名?

    我希望显示 pdf 文件的完整路径及其在浏览器上显示的内容 我的脚本有一个输入 html 用户将在其中输入文件名并提交表单 该脚本将搜索该文件 如果在子目录中找到该文件 则将文件内容输出到浏览器中并显示其名称 我能够显示内容 但无法同时显示
  • 使用 shell 脚本进行 CGI 编程

    我需要将文本框的内容传递到变量中 即 在 html 页面的文本框中输入的任何内容都需要传递给变量 这是因为我在 linux shell 编程中调用 HTML 以及 CGI 我需要根据需要操纵该变量 你有什么想法去做吗 我需要做的是 我想获取
  • fgets 和 fread 之间的区别

    我有以下代码 include
  • 当与不需要虚拟机的编译程序一起使用时,CGI 是否仍然很慢?

    当我学习 CGI 时 我了解到任何编程语言都可以用来将其输出挂钩到 http 响应消息 而它的输入是 http 请求消息 我读过的很多文章都在 Perl 的背景下讨论 CGI 这是因为 Perl 是与 CGI 结合使用的最常见的语言吗 我想
  • Python Web 编程的不同方法的优缺点

    我想使用 Python 编写一些服务器端脚本 但我对这样做的方法有点迷失了 它从 DIY CGI 方法开始 似乎以一些相当强大的框架结束 这些框架基本上可以自己完成所有工作 中间有很多东西 比如web py http webpy org P
  • Web 开发中的 Perl [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 CGI 模式下运行时如何覆盖 PHP 配置

    有一些教程告诉我如何在 CGI 模式下运行时覆盖 PHP 配置 但我仍然很困惑 因为很多人都认为服务器运行在 Linux 上 虽然我需要这样做also在 Windows 上 我的主机确实使用 Linux 但我的本地开发计算机使用 Windo

随机推荐

  • php设计模式

    php 设计模式 转自 https www cnblogs com siqi archive 2012 09 09 2667562 html 1 单例模式 单例模式顾名思义 xff0c 就是只有一个实例 作为对象的创建模式 xff0c 单例
  • PHP八大设计模式

    PHP命名空间 转自http blog csdn net flitrue article details 52614599 reload 可以更好地组织代码 xff0c 与Java中的包类似 Test1 php span class php
  • DataTables 详细设置(1)

    转自http blog csdn net arsiya jerry article details 50505294 并不是所有的后台开发都有美工和前端工程师来配合做页面 xff0c 为了显示数据并有一定的美感 xff0c jQuery的D
  • dataTables-使用详细说明整理

    转自 http blog csdn net mickey miki article details 8240477 本文共四部分 xff1a 官网 基本使用 遇到的问题 属性表 一 xff1a 官方网站 xff1a http www dat
  • 关于Xshell过期,需要采购问题

    1 卸载电脑中过期的xshell 2 http www netsarang com download free license html 去官网下载免费版 Home amp School 家庭和学校版本 注意邮箱要填写正确 填写完提交后会收
  • genromfs的使用及nuttx下romfs制作

    61 61 61 61 61 gt 我的博客目录导航 前言 这篇文章仅仅是为了记录如何使用genromfs制作romfs然后在nuttx上直接应用 xff0c 不会去详细介绍romfs的一系列特性 genromfs 首先去下载genromf
  • STM32智能小车系列教程(一)小车介绍及基本搭建

    大家收到小车包裹后 xff0c 想必都已经跃跃欲试了 xff0c 接下来关注我们的系列教程 xff0c 教你从零搭建一辆STM32F103智能小车 xff0c 本教程面向零基础 xff08 当然基本的单片机知识和C语言知识还是需要具备的 x
  • PHP上传图片 (从html到JS再到php onclick方式提交)

    1 首先form表单必须是post方式提交 xff0c 并且含有enctype 61 34 multipart form data 34 属性 如图 2 JS代码 利用formdata接收html中form表单的数据 利用append将其他
  • MongoDB Windows系统各个64位版本下载地址: http://dl.mongodb.org/dl/win32/x86_64

    MongoDB Windows系统各个64位版本下载地址 xff1a http dl mongodb org dl win32 x86 64
  • PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

    看PostgreSQL9的官方文档 xff0c 我越看越迷糊 xff0c 这表空间 xff0c 数据库 xff0c 模式 xff0c 表 xff0c 用户 xff0c 角色之间的关系怎么在PostgreSQL里这么混乱呢 xff1f 经过中
  • 关于phpExcel的使用

    execl数据导出 应用场景 xff1a 订单导出 64 param string title 模型名 xff08 如Member xff09 xff0c 用于导出生成文件名的前缀 64 param array cellName 表头及字段
  • phpExcel的使用方法以及导入导出实例【转载】

    一 下载PHPExcel 下载地址 xff1a https github com PHPOffice PHPExcel 二 读取Excel文件内容插入数据库 lt php require once 39 Classes PHPExcel p
  • 关于git 、初识git (fatal: Not a valid object name: 'master'.)

    主要错误原因是因为没有master分支 必须要commit一次 才可以有master分支 才可以创建别的分支 具体步骤 1 打开命令行 git add index html 2 git commit m 34 this is a test
  • 关于git的使用

    查看https blog csdn net qq 42072311 article details 80696886 https blog csdn net kevindgk article details 51606925 查看这两个博客
  • php使用upload封装类上传文件

    原文https blog csdn net navioo article details 51777799
  • phpStorm2018安装与破解(免安装打包版)

    首先将我为大家事先准备好的打包文件拷贝至软件安装盘 xff0c 本人安装于D盘 xff0c 所以这里已本人安装破解的过程进行讲述 1 gt phpStorm2018 2 2下载请转至链接 https pan baidu com s 1Kno
  • 最简洁的麦克纳姆轮原理与控制方法

    最简洁的麦克纳姆轮控制原理与控制方法 0 写在前面 对于第一次接触麦轮的小伙伴们肯定是没办法十分清晰地想象出麦轮底盘的各种运动该如何控制的 而在实际使用中 xff0c 麦轮的运动灵活性与控制难度之比又非常高 xff0c 可以说是在比较平整的
  • Nuttx下移植uorb笔记

    Nuttx下移植uorb笔记 之前接触过ros下的消息机制 xff08 生产者 消费者 xff09 模型 xff0c 第一感觉是灵活好用 xff0c 但是在资源有限的嵌入式环境里面 xff0c 邮箱 消息 显得就有点不那么灵活 xff0c
  • 关于ADRC算法以及参数整定(调参)的一些心得体会

    关于ADRC算法以及参数整定 xff08 调参 xff09 的一些心得体会 ADRC xff0c 全称叫做Active Disturbance Rejection Control xff0c 中文名是自抗扰控制技术 这项控制算法是由中科院的
  • boa-0.94.13:CGI中文问题

    为什么中文乱码 用win7 自带的浏览器ie 打开服务器的cgi form html xff0c 在Name 输入框输入 汉字 两个字 xff0c 提交服务器 如图1 图1 返回的是结果为 xff1a Server Got you para