2011-11-10 10 views
3

私はCP-1251にあるURLをいくつか持っています。例:PHPのURLのエンコーディングの問題

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

mb_detect_encodingはASCIIです。しかし、私はこれをUTF-8に変換しようとしましたが、運はありません。ただし、次のようになりました。

つまり、URLをWindows-1251に変換しました。これは奇妙ですが、文字を正しく示しています。しかし、私はこの変換されたURLをHTMLオブジェクト(いくつかの音楽プレーヤー)の中に挿入すると動作しません。 Firebugにエラーが表示されます:

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

だから私は正しいURLの代わりに疑問符を得ました。 urlencodeは役に立ちません。

ファイル自体はutf-8です。

私はこれらすべてのものと混同しています。ここに解決策はありますか?あなたが探しているが、その元のエンコードは、Windows-1251が何であるかを答え

+0

あなたは 'utf8_encode($ url)'を試しましたか?あなたのページのエンコーディングがutf-8に設定されている場合、これはうまくいくはずです。 –

+0

@Michel Mior - はい私は持っています。そして、それは私に次のようなものを与えます: 'http://domain.com/Test-СÐСС¡¡ÐÐÐÐÐÐ'ÐÑÐÑ.mp3'それはもちろん良くありません。 – grjj3

+0

"ファイル自体が' utf-8'だと言うと、HTMLページを意味しますか? –

答えて

1

が解決。

ファイル名を別に取ってrawurlencodeにするだけです。

1

正確にわからない、あなたは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