Post 从UTF-8站点发布到ISO-8859-1站点(PHP)

Post 从UTF-8站点发布到ISO-8859-1站点(PHP),post,curl,character-encoding,session-cookies,Post,Curl,Character Encoding,Session Cookies,关于下列情况: www.foo.com是以UTF-8格式交付的页面。它的特点是登录到www.bar.com/Servlet。www.bar.com是一个支持ISO-8859-1的应用程序 我有以下问题: 每当有人使用特殊字符(如德语umlauts)作为密码时,登录就会失败,因为密码是以UTF-8发布的,但应用程序希望它是以ISO-8859-1发布的 当然,我可以向html表单添加accept charset=“ISO-8859-1”属性,但这(当然)在IE中不起作用 我现在想到了一个代理脚本,它

关于下列情况:

www.foo.com是以UTF-8格式交付的页面。它的特点是登录到www.bar.com/Servlet。www.bar.com是一个支持ISO-8859-1的应用程序

我有以下问题:

每当有人使用特殊字符(如德语umlauts)作为密码时,登录就会失败,因为密码是以UTF-8发布的,但应用程序希望它是以ISO-8859-1发布的

当然,我可以向html表单添加
accept charset=“ISO-8859-1”
属性,但这(当然)在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;
define('postrl','https://www.bar.com/Servlet');
数组映射('utf8\U解码',$\U POST);
$ch=curl_init(姿势);
卷曲设置($ch,卷曲设置桩,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\u exec($ch);
卷曲关闭($ch);
$response=preg_replace(“/()/U”,“$1”,“$response”);
回音$应答;
出口

我没有找到一个简单可行的解决方案。现在,我的解决方案是将发布到同一页面的iframe中的UTF-8-form移动,并在此iframe中将字符集设置为ISO-8859-1。iframe表单发布到target=“\u top”然后。

如果UTF数据包含高位字符,则无法将其转换为ASCII而不丢失数据。我指的是UTF和ISO字符集中都存在的特殊字符(如UMLAUT)。