PHP: Как копирование ($ url, $ filename) работает с кодированием% для символов UTF-8? - PullRequest
1 голос
/ 25 марта 2011

Как это работает

copy("http://translate.google.com/translate_tts?tl=en&q=Love+Me", "/directory/loveme.mp3");

Но это не так?

copy("http://translate.google.com/translate_tts?tl=hi&q=%26%232310%3B%26%232354%3B%26%232370%3B+%26%232327%3B%26%232379%3B%26%232349%3B%26%232368%3B",  "/directory/loveme.mp3");

Если я вставлю оба URL-адреса в браузер, они будут воспроизводиться нормально. Но второй URL-адрес просто копирует пустой файл mp3, а первый - правильный файл MP3.

1 Ответ

0 голосов
/ 25 марта 2011

Попробуйте сделать это на URL перед вызовом copy:

function utf8RawUrlDecode ($source) {
    $decodedStr = "";
    $pos = 0;
    $len = strlen ($source);
    while ($pos < $len) {
        $charAt = substr ($source, $pos, 1);
        if ($charAt == '%') {
            $pos++;
            $charAt = substr ($source, $pos, 1);
            if ($charAt == 'u') {
                // we got a unicode character
                $pos++;
                $unicodeHexVal = substr ($source, $pos, 4);
                $unicode = hexdec ($unicodeHexVal);
                $entity = "&#". $unicode . ';';
                $decodedStr .= utf8_encode ($entity);
                $pos += 4;
            }
            else {
                // we have an escaped ascii character
                $hexVal = substr ($source, $pos, 2);
                $decodedStr .= chr (hexdec ($hexVal));
                $pos += 2;
            }
        } else {
            $decodedStr .= $charAt;
            $pos++;
        }
    }
    return $decodedStr;
}

Я получил это из комментариев на документах для rawurldecode - прокрутите вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...