文件保存编码为UTF-8
页面也设置编码为UTF-8
但是在INPUT中输出的中文会变为乱码
请教一下测试数据:
thunder://QUFmdHA6Ly9keTpkeUB4bGouMnR1LmNjOjMwMTAxL1vRuMDXz8LU2Hd3dy4ydHUuY2Nd1s/D/Mzmye0uSEQxMjgwuN/H5bn60+/W0NfWLnJtdmJaWg==
<?php
if(isset($_POST['convert']))
{
$url = $_POST['before'];
$url = str_ireplace('thunder://','',$url);
$url = str_ireplace('qqdl://','',$url);
$url = str_ireplace('flashget://','',$url);
$url = base64_decode($url);
$url = str_ireplace('[FLASHGET]','',$url);
if(preg_match('/AA(.*)ZZ/',$url,$result))
{
$result = $result[1];
}
else
{
$result = $url;
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>下载地址转换器</title>
<link href="style.css" type="text/css" rel="stylesheet" />
</head><body>
<div id="container">
<div id="top"></div>
    <div id="main">
     <form action="" method="post">
        <table width="630" border="0">
              <tr>
                <td width="68" height="80">原始地址</td>
                <td width="554"><label for="before"></label>
                <input type="text" name="before" id="before" value="<?php if(isset($_POST['before'])){echo $_POST['before'];} ?>"/></td>
              </tr>
              <tr>
                <td height="40">真实地址</td>
                <td><input name="after" type="text" id="after" readonly="readonly" value="<?php if(isset($result)){echo $result;} ?>"/></td>
              </tr>
              <tr>
                <td height="80" colspan="2" align="center"><input type="submit" name="convert" id="convert" class="button" value=" " />
                <input type="reset" name="reset" id="reset" class="button" value=" " /></td>
              </tr>
            </table>
        </form>
    </div>
    <div id="bottom"></div>
</div>
</body>
</html>

解决方案 »

  1.   

    官方手册上对base64-encode有这么一句
    Some files can give a real headhache when script file is coded in UTF-8. Change it to ANSI and it'll work fine.
      

  2.   

    你的测试数解码后据是 gbk 编码的
    ftp://dy:[email protected]:30101/[迅雷下载www.2tu.cc]窒命替身.HD1280高清国语中字.rmvb你把他当做 utf-8 编码数据回显,自然就是乱码了
      

  3.   

    base64_decode解码后的数据是gbk编码?
      

  4.   

    不是base64_decode解码后的数据是gbk编码
    而是他原来是gbk数据,然后 base64_encode 的base64编解码并不会改变数据的本身,原来是什么,还原回来还是什么你在处理时需要加上编码识别的代码
      

  5.   

    输入数据是
    thunder://QUFmdHA6Ly9keTpkeUB4bGouMnR1LmNjOjMwMTAxL1vRuMDXz8LU2Hd3dy4ydHUuY2Nd1s/D/Mzmye0uSEQxMjgwuN/H5bn60+/W0NfWLnJtdmJaWg==然后通过函数转换
    为什么说输入的数据是gbk?有点不太明白
      

  6.   

    不错,你输入的是纯 ascii 的数据
    只不过经过你的程序解码后,其内容是 gbk 编码的
      

  7.   

    老徐的意思是你的
    thunder://QUFmdHA6Ly9keTpkeUB4bGouMnR1LmNjOjMwMTAxL1vRuMDXz8LU2Hd3dy4ydHUuY2Nd1s/D/Mzmye0uSEQxMjgwuN/H5bn60+/W0NfWLnJtdmJaWg==是通过GBK 编码
    所以当你还原回去的时候 他还是GBK解决方法就是再做个编码转换...
      

  8.   


    其实我对编码不太熟悉
    只知道gb2312包含6000多个常用汉字
    gbk又多包含20000多个汉字
    然后UTF-8是世界通用 比上面的多占用一点空间
    我明白两位的意思
    但是不明白下面这行是GBK编码的
    ftp://dy:[email protected]:30101/[迅雷下载www.2tu.cc]窒命替身.HD1280高清国语中字.rmvb
    难道说只要出现中文就是GBK?
    UTF8不包含吗
      

  9.   

    function foo($url) {
      $url = str_ireplace('thunder://','',$url);
      $url = str_ireplace('qqdl://','',$url);
      $url = str_ireplace('flashget://','',$url);
      $url = base64_decode($url);
      $url = str_ireplace('[FLASHGET]','',$url);
      if(preg_match('/AA(.*)ZZ/',$url,$result)) {
        $result = $result[1];
      } else {
        $result = $url;
      }
      return $result;
    }$s = 'thunder://QUFmdHA6Ly9keTpkeUB4bGouMnR1LmNjOjMwMTAxL1vRuMDXz8LU2Hd3dy4ydHUuY2Nd1s/D/Mzmye0uSEQxMjgwuN/H5bn60+/W0NfWLnJtdmJaWg==';
    $t = foo($s);
    echo mb_detect_encoding($t, 'utf-8, gbk');CP936CP936 就是 GBK
      

  10.   

    “包含”指的是内容,GBK汉字也包含繁体,但香港台湾本地系统不转换也是读不了
    类似的,big5汉字也包含简体字省略的误解,“utf-8包含gbk”全句是“utf-8能显示的汉字包含gbk能显示的汉字”
    并不是“utf-8编码包含gbk编码”,至于“能显示”的后续工作还是要程序去告诉计算机“怎样显示”
    仅仅告诉计算机“显示为utf-8”是不行的input:男人+女人
    output:夫妇
    out的概念包含in,但仅仅这样是不成功的,因为少了“转换为夫妇(男人+女人,结婚)”这个必须的过程
      

  11.   

    还有一种就是HTML的解码器也可以弄一个,一般好一些的web IDE会自动帮你生成的,具体的方法是在页面的文件里添加
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    最后一句是起到作用的。如果还不行的话,你可以检查一下,数据库的数据集是不是UTF8 ,然后IDE上也最好选择UTF8,两者一致的话,就不会有乱码出现了。前几天我也被这个困扰着,找了一会资料,终于弄好了
      

  12.   

    问题就在这了
    UTF-8能显示
    ftp://dy:[email protected]:30101/[迅雷下载www.2tu.cc]窒命替身.HD1280高清国语中字.rmvb
    那为什么说它是gbk呢- -.