2010-11-05 43 views
0

關於以下情況:從UTF-8站點發布到ISO-8859-1站點(PHP)

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應用程序?

我捲曲的代碼如下所示:

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; 
+0

如果包含高位字符,則不能將UTF數據轉換爲ASCII而不丟失數據。 – 2010-11-05 09:35:53

+0

我正在討論UTF和ISO字符集中存在的特殊字符(如變音符號)。 – acme 2010-11-05 09:41:41

回答

0

我沒有找到一個簡單可行的解決方案。我現在的解決方案是將UTF-8格式移動到同一頁面上的iframe中,並在此iframe中將字符集設置爲ISO-8859-1。然後iframe表單帖子到target =「_ top」。