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


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 常用字符串函数总结
Mar 15 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
php自定义加密与解密程序实例
Dec 31 PHP
php防止sql注入简单分析
Mar 18 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 PHP
php while循环控制的简单实例
May 30 PHP
thinkphp分页实现效果
Oct 13 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 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
discuz安全提问算法
2007/06/06 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python创建日历实例
2014/08/21 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
八大排序算法的Python实现
2021/01/28 Python
Django中的Signal代码详解
2018/02/05 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
python语音识别实践之百度语音API
2018/08/30 Python
python SVD压缩图像的实现代码
2019/11/05 Python
python 有效的括号的实现代码示例
2019/11/11 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
大学生学习自我评价
2014/01/13 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
保险专业自荐信范文
2014/02/20 职场文书
亲子读书活动方案
2014/02/22 职场文书
小组名称和口号
2014/06/09 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
面试复试通知单
2015/04/24 职场文书
超市员工管理制度
2015/08/06 职场文书
导游词之临安白水涧
2019/11/05 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL