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


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 相关文章推荐
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 PHP
php去除数组中为0的元素的实例分析
Nov 17 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
php中的数组操作函数整理
2008/08/18 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
简单的js表格操作
2016/09/24 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
Python max内置函数详细介绍
2016/11/17 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
python中append实例用法总结
2019/07/30 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
记账会计岗位职责
2014/06/16 职场文书
新文化运动的口号
2014/06/21 职场文书
研究生导师推荐信
2014/09/06 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
2015年副班长工作总结
2015/05/15 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫