Публикация с сайта UTF-8 на сайт ISO-8859-1 (PHP)

Относительно следующей ситуации:

www.foo.com — это страница, представленная в кодировке UTF-8. Он имеет форму входа на www.bar.com/Servlet. www.bar.com — это приложение, совместимое с ISO-8859-1.

У меня есть следующая проблема:

всякий раз, когда кто-то использует специальные символы, такие как немецкие умляуты, для своего пароля, вход в систему завершается ошибкой, потому что пароль публикуется в UTF-8, но приложение ожидает, что он будет в ISO-8859-1.

Конечно, я мог бы добавить атрибут accept-charset="ISO-8859-1" в html-форму, но это (конечно) не работает в IE.

Теперь я подумал о прокси-скрипте, который преобразует UTF8 в ISO-8859-1 и отправляет эти данные на www.bar.com/Servlet. Преобразование работает, а также публикация (сделанная CURL). Но поскольку я повторяю возвращенный html-код www.bar.com/Servlet напрямую (а в адресной строке все еще есть www.foo.com), относительные ссылки в html не работают. Мне удалось добавить к выводу базовый тег с уродливой заменой, и, похоже, это работает, но это не очень элегантное решение.

Есть ли более простой способ отправить данные UTF-8 в приложение ISO-8859-1?

Мой код CURL выглядит так:

define('POSTURL', 'https://www.bar.com/Servlet');

array_map('utf8_decode', $_POST);

$ch = curl_init(POSTURL);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

$response = curl_exec($ch);
curl_close ($ch);

$response = preg_replace('/(<head(.*)>)/U', "$1<base href=\"https://www.bar.com\" />", $response);
echo $response;

exit;

person acme    schedule 05.11.2010    source источник
comment
Вы не можете преобразовать данные UTF в ASCII без потери данных, если они содержат символы из более высоких битов.   -  person Halil Özgür    schedule 05.11.2010
comment
Я говорю о специальных символах, которые существуют как в кодировке UTF, так и в кодировке ISO (например, умляуты).   -  person acme    schedule 05.11.2010


Ответы (1)


Я не нашел простого рабочего решения. Мое решение теперь состоит в том, чтобы переместить форму UTF-8, которая публикуется в iframe на той же странице, и установить кодировку в ISO-8859-1 в этом iframe. Затем форма iframe отправляет сообщения в target="_top".

person acme    schedule 20.12.2010