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


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 相关文章推荐
BBS(php &amp; mysql)完整版(四)
Oct 09 PHP
php入门小知识
Mar 24 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
Yii实现简单分页的方法
Apr 29 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
原生js实现购物车
2020/09/23 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Python调用Windows命令打印文件
2020/02/07 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
Python 日期与时间转换的方法
2020/08/01 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
探矿工程师自荐信
2014/01/24 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
保密承诺书
2014/03/27 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
外联部演讲稿
2014/05/24 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
2014年护士工作总结范文
2014/11/11 职场文书