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


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 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
解析php中heredoc的使用方法
Jun 17 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
PHP静态成员变量
Feb 14 PHP
PHP代码加密的方法总结
Mar 13 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 采集程序 常用函数
2008/12/18 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python机器人行走步数问题的解决
2018/01/29 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
基于Python fminunc 的替代方法
2020/02/29 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
男方父母婚礼答谢词
2014/01/25 职场文书
自我推荐信范文
2014/05/09 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
公司证明怎么写
2014/09/22 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
党校团干班培训心得体会
2016/01/06 职场文书