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


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实现定时生成HTML网站首页实例代码
Nov 20 PHP
php 分页类 扩展代码
Jun 11 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
php数据库备份还原类分享
Mar 20 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
解决php表单重复提交实现方法
Sep 29 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
thinkphp修改配置进入默认首页的方法
Feb 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
单点登录 Ucenter示例分析
2013/10/29 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
python实现的阳历转阴历(农历)算法
2014/04/25 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
Python数据集切分实例
2018/12/08 Python
python 实现UTC时间加减的方法
2018/12/31 Python
Python字典遍历操作实例小结
2019/03/05 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
九年级科学教学反思
2014/01/29 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript