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


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获取当前网址url并替换参数或网址的方法
Jun 06 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
php 使用array函数实现分页
Feb 13 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
php实现的单一入口应用程序实例分析
Sep 23 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
ThinkPHP5框架实现简单的批量查询功能示例
Jun 07 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
Angular的$http与$location
2016/12/26 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
Python中的生成器和yield详细介绍
2015/01/09 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
python判断正负数方式
2020/06/03 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
专项法律服务方案
2014/06/11 职场文书
教师一帮一活动总结
2014/07/08 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS
python中validators库的使用方法详解
2022/09/23 Python