0

以下の状況について:

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 によって行われます)。しかし、返された www.bar.com/Servlet の html を直接エコーしている (アドレス バーにはまだ 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;
4

1 に答える 1

0

簡単な実用的な解決策が見つかりませんでした。私の解決策は、投稿された UTF-8 フォームを同じページの iframe に移動し、この iframe 内で文字セットを ISO-8859-1 に設定することです。次に、iframe-form が target="_top" に投稿します。

于 2010-12-20T10:21:38.603 に答える