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中文问题 的相关文章

  • Erlang Ports:与类似“wc”的程序交互?

    我有一个外部 exe 程序 它从标准输入读取并生成结果 它的工作原理就像wc编程并读取直到EOF 或者更确切地说 流结束 Update 让我再添加一条解释 我基本上是在尝试编写一个 Erlang 管道 我可以在批处理文件中调用该程序 例如e
  • 在任何文件中打印 Perl 警告而没有“使用警告”或 -w

    我有很多经常被调用的旧 Perl 代码 我一直在编写一个新模块 突然间我在 Apache 的 error log 中收到很多警告 它们针对当前正在使用的每个模块 例如 my variable variable masks earlier d
  • 执行 CGI 脚本时出现软件错误

    我有一个用于上传的cgi脚本如下 usr bin perl use CGI use CGI Carp qw fatalsToBrowser my cgi new CGI my file cgi gt param file file m st
  • 从 CGI C 模块返回 http 错误代码

    我有一个用 C 编写的 CGI 模块 在某些情况下我想从该模块返回 HTTP 错误 400 问题是 我不知道如何从模块返回 HTTP 错误 看起来像我的模块中的 return 1 返回 500 内部服务器错误 我尝试过退回 400 等 但还
  • Tornado 或 Django 可以与 CGI 配合使用吗?

    Tornado 是一个类似于 Django 的 Web 服务器 框架 但具有实时功能 在我的服务器上 我没有 python 模块或 wsgi 模块 所以我想 计算机生成图像 有没有办法通过使用 CGI 文件夹让 Tornado 或 Djan
  • 编写一个以 root 身份运行的 perl cgi 应用程序

    我正在编写一个 Perl CGI 应用程序 在某些时候 此 cgi 应用程序需要以 root 身份运行才能访问和写入特定文件 我想知道我到底应该如何执行此操作以及执行此操作时应采取的安全预防措施 你几乎不应该 如果您无法避免它 请创建一小段
  • HTTP基本认证,使用python

    我希望我的用户访问我的域上的受保护目录 htaccess 和 htpasswd 均已创建并驻留在受保护的库中 要求输入用户名 密码组合的 html 是
  • 编写 Perl CGI 应用程序的最佳方法是什么?

    我见过的每个 CGI Perl 示例基本上都是一堆包含 HTML 的打印语句 这似乎不是编写 CGI 应用程序的最佳方法 有一个更好的方法吗 谢谢 编辑 我决定使用 CGI Application 和 HTML Template 并使用以下
  • 如何以不依赖扩展的方式禁用 htaccess 中的 cgi?

    我想在文档根目录下的目录中禁用任何类型的 CGI 执行 任何类型 php perl ruby 等等 我想以一种不依赖于文件扩展名的方式来执行此操作 在我的文档根目录下 因为用户必须能够放置和查看 HTML 文件 它必须位于 htaccess
  • 我什么时候应该使用 Perl CGI 而不是 PHP(反之亦然)?

    出于业余爱好 我在托管服务器上有一个共享空间 该服务器提供 PHP 和 Perl CGI 正如许多服务器一样 我在几个地方读到过 CGI 脚本现在已经过时了 我认为主要是为了性能问题 比如PHP 还是普通 Perl CGI 更快 https
  • 如何将变量值从 javascript 传递到 perl

    我正在使用 JavaScript 插件来获取 IP 地址 如果 IP 地址开头为10 15我想为一个变量分配一个值 如果IP以10 13我想为同一个变量分配不同的值 我不知道该变量是否必须在 Perl 或 JavaScript 中 我正在尝
  • 从虚拟/自定义“Web 服务器”调用 PHP

    基本上 我试图弄清楚如何从 Web 服务器 调用 PHP 我已阅读文档 但没有多大帮助 据我所知 调用 PHP 的方法有以下三种 通过命令行 例如 php f path to script php 通过 CGI 通过 FastCGI 通过网
  • Python:CGI在脚本退出前更新网页

    好吧 这是我的情况 我编写了一个带有文本区域的 HTML 表单 该文本区域向我的 python 脚本提交 POST 请求 我使用 cgi 库来解析文本区域并将其拆分为一个数组 然后 我使用循环处理这些项目并在处理时打印它们 看来 即使我将打
  • 如何减少 Perl CGI 脚本的启动时间?

    我正在开发一些 CGI 脚本 并且正在尝试找到一种解决方案来减少使用 use 导入大量模块时产生的 启动时间 Update 提供的解决方案很好 但我正在使用的脚本在控制台和 CGI 模式下运行 检查是否存在一些典型的 HTTP 环境变量 在
  • 捕获 python cgi 脚本后面的 url 路径?

    如果我举个例子来解释我的问题会更好 cgi 脚本的文件名 awesome URL http omgpython com awesome http omgpython com awesome awesome 脚本正常运行 我附加了一个 假 路
  • Python导入MySQLdb,Apache内部服务器错误

    我遇到了与 中描述 的类似问题 Web 服务器的 cgi 问题 https stackoverflow com questions 621874 cgi problem with web server 尽管我审查并测试了之前建议的解决方案
  • 使用 shell 脚本进行 CGI 编程

    我需要将文本框的内容传递到变量中 即 在 html 页面的文本框中输入的任何内容都需要传递给变量 这是因为我在 linux shell 编程中调用 HTML 以及 CGI 我需要根据需要操纵该变量 你有什么想法去做吗 我需要做的是 我想获取
  • 在Python 3中从CGI输出二进制数据

    这个问题与this one https stackoverflow com q 908331 554319 我在从 Python 2 中的 CGI 脚本打印原始二进制数据时没有遇到任何问题 例如 usr bin env python2 im
  • fgets 和 fread 之间的区别

    我有以下代码 include
  • 树莓派上的 /dev/mem 访问被拒绝

    我正在使用我的 Raspberry Pi 并且正在编写一个 cgi python 脚本 该脚本创建一个网页来控制我的 gpio 输出引脚 当我尝试将 RPi GPIO 作为 GPIO 导入时 我的脚本崩溃了 这是我收到的错误 File co

随机推荐

  • 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