【问题标题】:Posting from a UTF-8 site to a ISO-8859-1 site (PHP)从 UTF-8 站点发布到 ISO-8859-1 站点 (PHP)
【发布时间】:2010-11-05 09:31:52
【问题描述】:

关于以下情况:

www.foo.com 是一个以 UTF-8 格式提供的页面。它具有 www.bar.com/Servlet 的登录表单。 www.bar.com 是一个支持 ISO-8859-1 的应用程序。

我有以下问题:

只要有人使用特殊字符(如德语变音符号)作为密码,登录就会失败,因为密码以 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;

【问题讨论】:

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

标签: post curl character-encoding session-cookies


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2011-09-23
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多