代码之家  ›  专栏  ›  技术社区  ›  acme

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

  •  0
  • acme  · 技术社区  · 15 年前

    关于下列情况:

    我有以下问题:

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

    我当然可以加上 accept-charset="ISO-8859-1"

    我现在想到了一个代理脚本,它将UTF8转换为ISO-8859-1并将数据发布到www.bar.com/Servlet。转换是有效的,也是发布(由CURL完成)。但是当我直接回显www.bar.com/Servlet返回的html时(地址栏中仍然有www.foo.com),html中的相关链接不起作用。我设法用一个难看的替代品给输出添加了一个基标记,看起来很有效,但这不是一个非常优雅的解决方案。

    有没有更简单的方法将UTF-8数据发布到ISO-8859-1应用程序?

    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;
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   acme    15 年前

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

    推荐文章