Относительно следующей ситуации:
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;