PHP url编码问题

时间:2011-11-10 19:52:54

标签: php character-encoding

我相信,我在CP-1251中有一些网址。例如:

http://domain.com/Test - суть в этом.mp3

mb_detect_encoding表示它是ASCII。但是,我试图将其转换为UTF-8,但没有运气。然而,以下工作:

$url = mb_convert_encoding(urldecode($url), "Windows-1251", "auto");

这意味着它将网址转换为Windows-1251。这很奇怪,但它显示了正确的人物。但是当我在html对象(某些音乐播放器)中插入这个转换后的url时,它不起作用。 Firebug显示错误:

"NetworkError: 404 Not Found - http://domain.com/Test%20-%20????%20?%20????.mp3"

所以不知怎的,我得到了问号,而不是一个正确的网址。 urlencode无效。

文件本身为utf-8

我对所有这些东西感到困惑。这里有解决方案吗?

2 个答案:

答案 0 :(得分:1)

不完全确定您正在寻找的答案,但其原始编码为Windows-1251,您可以查看iconv:

var_dump(detect_encoding($url);

function detect_encoding($string) { 
  static $list = array('utf-8', 'windows-1251');

  foreach ($list as $item) {
    $sample = iconv($item, $item, $string);
    if (md5($sample) == md5($string))
      return $item;
  }
  return null;
}

此网站也非常有用:Universal Cyrillic Decoder

答案 1 :(得分:1)

解决。

只需单独取出文件名并rawurlencode即可。