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


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 相关文章推荐
用PHP发电子邮件
Oct 09 PHP
PHP递归返回值时出现的问题解决办法
Feb 19 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
php include类文件超时问题处理
Feb 06 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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面向对象全攻略 (五) 封装性
2009/09/30 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
Django 大文件下载实现过程解析
2019/08/01 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
数控专业毕业生求职信范文
2013/09/21 职场文书
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
违反课堂纪律检讨书
2014/01/19 职场文书
职工趣味运动会方案
2014/02/10 职场文书
国际贸易求职信
2014/07/05 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
公司2014年度工作总结
2014/12/10 职场文书
单身申明具结书
2015/02/26 职场文书
python中print格式化输出的问题
2021/04/16 Python