UTF-8和url中文的问题,急,在线等

Raser 2005-02-21 11:16:37
我的网站有下载链接,链到我的FTP站点。
FTP上的文件有的是用中文做文件名的,(GB2312编码,不要叫我改成西文名字,这办不到)我的下载页面是用UTF-8存的,所以下载的时候,不论在URL中直接用文件名还是加入urlencode都不能下载。我发现GB2312的“中国”urlencode后是“%D6%D0%B9%FA”,而UTF-8的则是“%E4%B8%AD%E5%9B%BD”。因为数据库的问题,我也不能把UTF-8页面改成GB2312,不然不兼容。现在我要在UTF-8的php页上提供下载,怎么办?
如果在url中直接用中文,那么就只有IE才能识别,Mozilla识别不了,这样的话我就无法提供Linux程序下载了。请各位大虾帮忙
...全文
375 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Raser 2005-03-01
  • 打赏
  • 举报
回复
问题解决,谢谢各位,其中xuzuning(唠叨)的正则代码少了几个“\”,我重贴一下。
<?php
//对照表的使用
$filename = "gb2utf8.txt";
$fp = fopen($filename,"r");
while(! feof($fp)) {
list($gb,$utf8) = fgetcsv($fp,10);
$charset[$gb] = $utf8;
}
fclose($fp);
//以上读取对照表到数组备用

/** gb2312到utf-8 **/
function gb2utf8($text, &$charset) {
//提取文本中的成分,汉字为一个元素,连续的非汉字为一个元素
preg_match_all("/(?:[\x80-\xff].)|[\x01-\x7f]+/",$text,$tmp);
$tmp = $tmp[0];
//分离出汉字
$ar = array_intersect($tmp, array_keys($charset));
//替换汉字编码
foreach($ar as $k=>$v)
$tmp[$k] = $charset[$v];
//返回换码后的串
return join('',$tmp);
}

/** utf-8到gb2312 **/
function utf82gb($text, &$charset) {
$p = "/[\xf0-\xf7][\x80-\xbf]{3}|[\xe0-\xef][\x80-\xbf]{2}|[\xc2-\xdf][\x80-\xbf]|[\x01-\x7f]+/";
preg_match_all($p,$text,$r);
$utf8 = array_flip($charset);
foreach($r[0] as $k=>$v)
if(isset($utf8[$v]))
$r[0][$k] = $utf8[$v];
return join('',$r[0]);
}

//测试
$s = gb2utf8('这是对照表的测试', $charset);
echo utf82gb($s, $charset);
?>
xuzuning 2005-02-25
  • 打赏
  • 举报
回复
不用iconv库的gb2312与utf-8的互换函数
http://www.dev-club.com/club/bbs/showEssence.asp?id=26921
jxflll 2005-02-25
  • 打赏
  • 举报
回复
到网上弄一个转换函数试试。
Raser 2005-02-25
  • 打赏
  • 举报
回复
up
Raser 2005-02-22
  • 打赏
  • 举报
回复
php4没有内建,服务器不支持
dreamoon 2005-02-22
  • 打赏
  • 举报
回复
根据需要使用下面的代码试试看

if (!isset($isIE))
{
static $isIE;
$isIE = iif(is_browser('ie'), true, false);
}

if ($isIE)
{
$attachmentinfo[filename] = iconv("UTF-8","GBK",$attachmentinfo[filename]);
}

若没有iconv库,但是Linux主机,可以将后半部分替换为:


if ($isIE)
{
$cmd = "echo '$attachmentinfo[filename]' | iconv -f UTF-8 -t GBK";
$attachmentinfo[filename] = shell_exec($cmd);
}

其他的还没想到,不过应该可以更进一步,根据客户端编码来调整iconv的参数。
不然Big5或者日韩语系还会有问题
surfchen 2005-02-21
  • 打赏
  • 举报
回复
查阅一下iconv函数

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧