简体   繁体   中英

PHP url encoding problems

I have some URL which is in CP-1251 i believe. For example:

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

mb_detect_encoding says it is ASCII. However, I've tried to convert this to UTF-8, but no luck. However the following worked:

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

Which means that it converted the url to Windows-1251 . Which is strange, but it shows the characters right. But when I insert this converted url inside an html object (some music player) it doesn't work. Firebug shows an error:

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

So somehow I got question marks instead of a right url. urlencode doesn't help.

The file itself is utf-8 .

I'm confused with all this stuff. Is there any solution here?

Not exactly sure what answer you're looking for but its original encoding is Windows-1251, you can check with 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;
}

This site can also be quite helpful: Universal Cyrillic Decoder

Solved.

Just needed to take the file name separately and rawurlencode it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM