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


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中的一些数组排序方法分享
Jul 20 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php存储过程调用实例代码
Feb 03 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
php中使用GD库做验证码
Mar 31 PHP
基于php实现的php代码加密解密类完整实例
Oct 12 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
Yii框架连表查询操作示例
Sep 06 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 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排序算法的复习和总结
2012/02/15 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python安装教程 Pycharm安装详细教程
2017/05/02 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
Python list运算操作代码实例解析
2020/01/20 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
保护环境倡议书
2014/04/14 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
大学生入党自传2015
2015/06/26 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
小程序实现筛子抽奖
2021/05/26 Javascript