在任意字符集下正常显示网页的方法一


Posted in PHP onApril 01, 2007

转:coolcode.cn
通常情况下,我们的网页要指定一个编码字符集,如 GB2312、UTF-8、ISO-8859-1 等,这样我们就可以在网页上显示我们指定编码的文字了。但是我们很可能会遇到这种情况,那就是我们可能希望在 ISO-8859-1 编码的网页上显示汉字,或者在 GB2312 编码的网页上显示韩文等。当然一种解决办法就是我们不用 ISO-8859-1 或者 GB2312 编码,而统统都采用 UTF-8 编码,这样我们只要在这种编码下,就可以混合显示各国文字了,这是现在很多网站采用的方法。

而我这里所说的并非上面这种方法,因为上面这种方法必须要指定字符集为 UTF-8 才可以,一旦用户手工指定为其他字符集,或者可能因为某些原因,那个字符集设置没起作用,而浏览器又没有正确自动识别的话,我们看到的网页还是乱码,尤其是在某些用框架作的网页中,某个框架中的页面如果字符集设置没起作用,在 firefox 中显示乱码而且还没法改变(我是说在不装RightEncode插件的情况下)。

而我这里介绍的方法即使是把网页指定为 ISO-8859-1 字符集,也能够正确显示汉字、日文等。原理很简单,就是把除了 ISO-8859-1 编码中前128个字符以外的所有其他的编码都用 NCR(Numeric character reference) 来表示。比如“汉字”这两个字,如果我们写成“汉字”这种形式,那么它在任意字符集下都可以正确显示。根据这个原理,我写了下面这个程序,它可以把现有的网页转化为在任意字符集下都能显示的网页。你只需要指定源网页的字符集和源网页,点提交按钮,就可以得到目标网页了。你也可以只转化某些文字,只需要把文字填写到文本框中,并指定这些文字原来的字符集,点提交按钮,就会在页面上面显示编码后的文字了。另外我还编写了 WordPress 的插件,现在我的 Blog 已经可以在任意字符集下都能正确显示了。
转化程序地址:http://3water.com/dxy/nochaoscode/

<?php 
function nochaoscode($encode, $str, $isemail = false) { 
    $str = iconv($encode, "UTF-16", $str);  
    for ($i = 0; $i < strlen($str); $i++,$i++) { 
        $code = ord($str{$i}) * 256 + ord($str{$i + 1}); 
        if ($code < 128 and !$isemail) { 
            $output .= chr($code); 
        } else if ($code != 65279) { 
            $output .= "&#".$code.";"; 
        } 
    } 
    return $output; 
} 
$encode = $_POST['encode']; 
if ($encode == '') $encode = 'UTF-8'; 
if ($_FILES['file']['size'] > 0) { 
    $data = nochaoscode($encode, file_get_contents($_FILES['file']['tmp_name'])); 
    header ("Content-type: application/octet-stream;");  
    header ("Content-length: ".strlen($data));  
    header ("Content-Disposition: attachment; filename=".$_FILES['file']['name']); 
    echo $data; 
} else { 
    header ("Content-type: text/html; charset=UTF-8");  
    if ($_POST['email']) { 
        echo htmlentities(nochaoscode($encode, $_POST['email'], true)); 
    } 
    else { 
        echo htmlentities(nochaoscode($encode, $_POST['content'])); 
    } 
?> 
<form enctype="multipart/form-data" method="POST"> 
encode: <input type="text" name="encode" value="UTF-8" /><br /> 
file: <input type="file" name="file" /><br /> 
<input type="submit" /> 
</form> 
<form method="POST"> 
encode: <input type="text" name="encode" value="UTF-8" /><br /> 
content: <textarea name="content"></textarea><br /> 
<input type="submit" /> 
</form> 
<form method="POST"> 
encode: <input type="text" name="encode" value="UTF-8" /><br /> 
email: <input name="email" /><br /> 
<input type="submit" /> 
</form> 
<?php 
} 
?>
PHP 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
php顺序查找和二分查找示例
Mar 27 PHP
一组PHP加密解密函数分享
Jun 05 PHP
php创建session的方法实例详解
Jan 27 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
Mar 16 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
用PHP实现的生成静态HTML速度快类库
Mar 31 #PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 #PHP
实现dedecms全站URL静态化改造的代码
Mar 29 #PHP
PHP中动态显示签名和ip原理
Mar 28 #PHP
收集的PHP中与数组相关的函数
Mar 22 #PHP
用PHP写的MySQL数据库用户认证系统代码
Mar 22 #PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 #PHP
You might like
php分页函数示例代码分享
2014/02/24 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
适用于所有创业者的创业计划书
2014/02/05 职场文书
中考冲刺决心书
2014/03/11 职场文书
奖学金感谢信
2015/01/21 职场文书
费用申请报告范文
2015/05/15 职场文书
河童之夏观后感
2015/06/11 职场文书
个人收入证明范本
2015/06/12 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers