查看: 1268|回复: 12
|
PHP - 网页 encoding 的问题
[复制链接]
|
|
小弟自己做了一个网络日志系统,中途遇到了很困难的问题,就是简体和繁体转换的问题。
其实我的网页主要是使用简体制作的,内容也是使用简体输入的,可是我另外自己增加了繁体的转换功能。就是说日过游览者点击繁体的时候,我的网页会踢繁体显示,否则就以简体显示。
日志地址
我的繁体页面主要是使用ob_start()来实行转换的。
内容大概就是这样:
- <?php
- //这个是没有问题的编码
- functiong big5_convert($string)
- {
- ...
- ...
- ...
- return $string;
- }
- ob_start(big5_convert);
- ?>
- <html>
- ...
- ...
- ...
- </html>
- <?php
- ob_end_flush();
- >
复制代码
起初是没有问题的,简体和繁体的现实都正常。
可是最近我换了伺服器,这一个伺服器不支援big5/gb2312的encoding的,所以我打算用unicode(utf-8)的编码来显示我的网页。当我在简体转换unicode的时候还没有出现问题,一切正常。可是当我使用繁体转换成unicode的时候,问题就来了。
我大概知道问题出现在那里,就是想不到解决的方法。在没有办法之下就想到了CARI!的高手们。救救我啊!
问题就是在我的繁体转换程式是使用ob_start()的方法转换,然后我的unicode转换程式也是使用ob_start()转换。内码大概就是这样。
- <?php
- //这个是会出现问题的编码
- functiong big5_convert($string)
- {
- ...
- ...
- ...
- return $string;
- }
- functiong unicode_convert($string)
- {
- ...
- ...
- ...
- return $string;
- }
- ob_start(big5_convert);
- ob_start(unicode_convert);
- ?>
- <html>
- ...
- ...
- ...
- </html>
- <?php
- ob_end_flush();
- >
复制代码
我在内存监视的时候,发现到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 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 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 的方法... 要等我试试看了才知道...  |
|
|
|
|
|
|
|
发表于 18-10-2005 12:12 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 18-10-2005 11:59 PM
|
显示全部楼层
我不能下载那个,因为我不是会员。还有,你那个转换的方法和我得很接近,只是我的是转换的是整个页面,不是单字。
还有,我有想过要把我的资料都用unicode储存,可是这样很麻烦,需要用到的时候又要转换,然后输入的时候也要转换,更改的时候也是,辛苦~加上如果出错的话,我在数据库也看不到我的资料,只能看到一些号码。
此外,数据库的体积及运行速度也是一个问题,unicode比较占空间。
还有,我现在发现了另一个新的问题,那就是如果我游览转换了的页面,我在留言的时候会出现乱码。
这个是什么原因?
|
|
|
|
|
|
|
|
发表于 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用在全页翻译。
- function convert($string)
- {
- ...
- ...
- return $string;
- }
- $new_string = convert($old_string); //这个是翻译其中一项资料
- ob_start('convert'); //这是翻译整个页面
复制代码
function本来就没有问题的,问题就是可能我的用法。可是我要如何更改呢?
|
|
|
|
|
|
|
|
发表于 20-10-2005 12:43 AM
|
显示全部楼层
是翻译整个页面的问题...
照理说,这个问题不因该出现的。
我傻了~ |
|
|
|
|
|
|
|

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

楼主 |
发表于 25-10-2005 10:01 AM
|
显示全部楼层
怎么没有人来救救小浪儿~?我真得很想解决掉这个问题,否则我的网络日志就不能达到我的学习目标了。
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|