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


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 设置MySQL连接字符集的方法
Jan 02 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
PHP函数getenv简介和使用实例
May 12 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
Jun 26 PHP
PHP数组和explode函数示例总结
May 08 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
PHP时间函数使用详解
Mar 21 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
微信公众号之主动给用户发送消息功能
Jun 22 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
DC动漫人物排行
2020/03/03 欧美动漫
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php获取根域名方法汇总
2014/10/28 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
jquery each()源代码
2011/02/14 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
python文件和文件夹复制函数
2020/02/07 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
是否有自动比较结构的方法
2015/06/03 面试题
介绍一下write命令
2012/09/24 面试题
九月份红领巾广播稿
2014/01/22 职场文书
离职保密承诺书
2014/05/28 职场文书
销售员岗位职责
2014/06/09 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python