佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1268|回复: 12

PHP - 网页 encoding 的问题

[复制链接]
发表于 14-10-2005 10:59 PM | 显示全部楼层 |阅读模式
小弟自己做了一个网络日志系统,中途遇到了很困难的问题,就是简体和繁体转换的问题
其实我的网页主要是使用简体制作的,内容也是使用简体输入的,可是我另外自己增加了繁体的转换功能。就是说日过游览者点击繁体的时候,我的网页会踢繁体显示,否则就以简体显示。

日志地址

我的繁体页面主要是使用ob_start()来实行转换的。
内容大概就是这样:

  1. <?php

  2. //这个是没有问题的编码

  3. functiong big5_convert($string)
  4. {
  5. ...
  6. ...
  7. ...
  8. return $string;
  9. }

  10. ob_start(big5_convert);
  11. ?>

  12. <html>
  13. ...
  14. ...
  15. ...
  16. </html>

  17. <?php
  18. ob_end_flush();
  19. >
复制代码


起初是没有问题的,简体和繁体的现实都正常。
可是最近我换了伺服器,这一个伺服器不支援big5/gb2312的encoding的,所以我打算用unicode(utf-8)的编码来显示我的网页。当我在简体转换unicode的时候还没有出现问题,一切正常。可是当我使用繁体转换成unicode的时候,问题就来了。

我大概知道问题出现在那里,就是想不到解决的方法。在没有办法之下就想到了CARI!的高手们。救救我啊!

问题就是在我的繁体转换程式是使用ob_start()的方法转换,然后我的unicode转换程式也是使用ob_start()转换。内码大概就是这样。

  1. <?php

  2. //这个是会出现问题的编码

  3. functiong big5_convert($string)
  4. {
  5. ...
  6. ...
  7. ...
  8. return $string;
  9. }

  10. functiong unicode_convert($string)
  11. {
  12. ...
  13. ...
  14. ...
  15. return $string;
  16. }

  17. ob_start(big5_convert);
  18. ob_start(unicode_convert);
  19. ?>

  20. <html>
  21. ...
  22. ...
  23. ...
  24. </html>

  25. <?php
  26. ob_end_flush();
  27. >
复制代码


我在内存监视的时候,发现到unicode_convert执行的时候,big5_convert还没有把页面转换成繁体的(不懂是还没有转换,还是已经替换掉了,因为我也是使用ob_start()来执行的),所以unicode_convert转换的还是简体的内容,可是它显示的得却是繁体的utf-8,所以会页面出现乱码
(我现在假设我的unicode_convert的时候,会自动探测内容的编码,就是说不管big5 to utf-8或是 gb2312 to utf-8都没有问题的)

日志地址



[ 本帖最后由 JR86 于 16-10-2005 02:00 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 15-10-2005 09:16 PM | 显示全部楼层
原帖由 -祯- 于 15-10-2005 08:18 PM 发表
我好想知道怎么可以做到繁体简体互转哦
可以教我吗??


我没有做互转,只是简体转换成繁体罢了,并没有把繁体转换成简体。简体的内容是直接从数据可里面得到的。


Wikipedia
里面有转换的方法,你可以从里面得到相关的资料。我也是在这里研究到的。


[ 本帖最后由 JR86 于 15-10-2005 09:18 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 16-10-2005 05:33 PM | 显示全部楼层
怎么没有人帮忙啊?救命啊!goatstudio, exiang, 你们有在吗?
回复

使用道具 举报

发表于 17-10-2005 07:37 AM | 显示全部楼层
JR86, 对不起,整个WEEKEND 没上网了。
刚看了你的网站,很不错呀~!

hmm.. 你的问题,我也不知道如何决绝。
如果我是你,我会把资料都转换去UTF-8,存放在资料库,然后要转换去GB/BIG5 都很容易。

你的HTTP HEADER/ENCODING 等都对了,乱码的问题因该是在转换时发生的。
说真的,我都不知道BIG5,GB 里部是如何运作的……哈哈

我曾经做过一个很无聊的HEX... UTF-8 转换器,可能不能和你的问题没关系,但也许也有些许帮助?

用法:hex.php?hex=8fd9662f7b2c4e8c4e2a6d4b8bd5ff0c8fd94e2a662f004d00543002

<?php

function str_split($text, $c)
{
        $len = strlen($text);
        $a = 0;
        while($a < $len)
        {
                if ($a + $c > $len)
                {
                        $c = $len - $a;
                }

                $arr[] = substr($text, $a, $c);
                $a += $c;
        }
        return $arr;
}


function todec($string)
{
        $split_array = str_split($string, 4);
        foreach($split_array as $item)
        {
                $temp .= hexdec($item)." ";
        }
        return $temp;
}

function toweb($string)
{
        $split_array = str_split($string, 4);
        foreach($split_array as $item)
        {
                $temp .= "&#".hexdec($item).";";
        }
        return $temp;
}
$string = $_GET['hex'];

if($string != '')
{
        //$hex_string = hex2str($string);
}
else
{
        echo "Pls pass in string value with the parameter: hex=value";
}

echo "<br> HEX: $string";
echo "<br> Converted HEX to Decimal: ".todec($string);
echo "<br> Converted DECIMAL TO WEB: ".htmlentities(toweb($string));
echo "<br> The TEXT: ".toweb($string);

//8fd9662f7b2c4e8c4e2a6d4b8bd5ff0c8fd94e2a662f004d00543002
?>
回复

使用道具 举报

发表于 18-10-2005 08:24 AM | 显示全部楼层
JR86, 对不起,好久没有登录了。

这个问题我看我帮不了你, 如果是Apache 的关系, 就只要在httpd.conf 里有一个DefaultEncoding 修改。

不过我看不是这个问题。
回复

使用道具 举报

发表于 18-10-2005 09:57 AM | 显示全部楼层
现在才看到你的问题, 暂时没有头绪要如何去解决...
如果你是用 wikipedia 的方法... 要等我试试看了才知道...
回复

使用道具 举报

Follow Us
发表于 18-10-2005 12:12 PM | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 18-10-2005 11:59 PM | 显示全部楼层

我不能下载那个,因为我不是会员。还有,你那个转换的方法和我得很接近,只是我的是转换的是整个页面,不是单字。

还有,我有想过要把我的资料都用unicode储存,可是这样很麻烦,需要用到的时候又要转换,然后输入的时候也要转换,更改的时候也是,辛苦~加上如果出错的话,我在数据库也看不到我的资料,只能看到一些号码。

此外,数据库的体积及运行速度也是一个问题,unicode比较占空间。

还有,我现在发现了另一个新的问题,那就是如果我游览转换了的页面,我在留言的时候会出现乱码。
这个是什么原因?
回复

使用道具 举报


ADVERTISEMENT

发表于 19-10-2005 10:31 AM | 显示全部楼层
你可以免费在PHPCLASS 开户口的。
我觉得这个CLASS 一定能够解决你的问题。
回复

使用道具 举报

 楼主| 发表于 19-10-2005 09:19 PM | 显示全部楼层
原帖由 exiang 于 19-10-2005 10:31 AM 发表
你可以免费在PHPCLASS 开户口的。
我觉得这个CLASS 一定能够解决你的问题。



这个class我已经下载了,发现和我的方法是一样的,也就是说执行的时候遇到的问题还是一样。
其实这个class本来就是一个function,只是我自己把这个function用在全页翻译。

  1. function convert($string)
  2. {
  3.   ...
  4.   ...
  5.   return $string;
  6. }

  7. $new_string = convert($old_string);   //这个是翻译其中一项资料

  8. ob_start('convert');    //这是翻译整个页面
复制代码

function本来就没有问题的,问题就是可能我的用法。可是我要如何更改呢?

回复

使用道具 举报

发表于 20-10-2005 12:43 AM | 显示全部楼层
是翻译整个页面的问题...
照理说,这个问题不因该出现的。
我傻了~
回复

使用道具 举报

 楼主| 发表于 21-10-2005 06:08 PM | 显示全部楼层
救救小狼儿~问题还是没有解决哦~!
小狼儿已经想到发毛都脱落了。
回复

使用道具 举报

 楼主| 发表于 25-10-2005 10:01 AM | 显示全部楼层

怎么没有人来救救小浪儿~?我真得很想解决掉这个问题,否则我的网络日志就不能达到我的学习目标了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 4-3-2025 11:37 PM , Processed in 0.133118 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表