Разница Firefox - Chrome при кодировании умлаутов - PullRequest
6 голосов
/ 02 апреля 2012

Chrome преобразует это: aöüß в %C3%A4%C3%B6%C3%BC%C3%9F Но Firefox преобразует это в эту странную вещь здесь: a%F6%FC%DF Я не могу найти способ конвертировать Firefox обратно в оригинал в PHP. Urldecode и rawurldecode, к сожалению, не работают. Кто-нибудь знает, как с этим бороться? Спасибо.

Ответы [ 2 ]

5 голосов
/ 02 апреля 2012

Как уже догадался Тей: Chrome использует UTF-8 (как, вероятно, рекомендуется) для параметров URL, в то время как Firefox использует Latin-1. Я не думаю, что вы можете контролировать это поведение. Также это будет трудно обработать, потому что вам нужно угадать, какую кодировку вы использовали.

Вот как работает декодирование (зависит от браузера, если вы используете UTF-8 в своем приложении):

Chrome:

$text = urldecode($_GET['text']);

Firefox:

$text = utf8_encode(urldecode($_GET['text']));

Это может быть решение, которое работает в большинстве случаев:

function urldecode_utf8($text) {
    $decoded = urldecode($text);

    if (!mb_check_encoding($decoded, 'UTF-8')) {
        $decoded = utf8_encode($decoded);
    }

    return $decoded;
}
1 голос
/ 02 апреля 2012

Заставьте вашу страницу использовать UTF-8.Вероятно, эти коды имеют разные кодированные умляуты.Один - что-то вроде Latin1, а другой, возможно, UTF-8.

Лучший способ заставить utf-8 использовать метатег в html.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...