2011-11-10 84 views
3

我有一些URL在CP-1251我相信。例如:PHP网址编码问题

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

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

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

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

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

所以不知何故,我得到了问号而不是正确的URL。 urlencode没有帮助。文件本身是utf-8

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

+0

你试过'utf8_encode($ url)'吗?如果你的页面的编码设置为utf-8,这应该可以工作。 –

+0

@米歇尔米奥 - 是的,我有。它给了我以下内容:'http://domain.com/Test - 呃¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Ñ。Ñ.mp3'这当然不好。 – grjj3

+0

当你说“文件本身是'utf-8'”你是指HTML页面吗? –

回答

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