我有一個應用程序正在採取UTF8編碼的字符,需要通過ISO-8859-1編碼通過curl作爲xml的一部分發送它們。utf8到ISO-8859-1沒有正確地轉換一些字符通過捲曲
這是我的測試代碼:
header('Content-Type: text/plain; charset=IS0-8859-1');
$message = '§ ° " @ # € % &/() = + ` ´^¨ * - _ : . ; ,';
echo mb_convert_encoding($message, 'ISO-8859-1', 'UTF-8');
//build xml to post
$content =
'<?xml version="1.0" encoding="ISO-8859-1"?>
<mobilectrl_sms>
<header>
<customer_id>'.CUSTOMER_ID.'</customer_id>
<password>'.PASSWORD_ID.'</password>
</header>
<payload>
<sms account="'.SHORT_CODE.'">
<message><![CDATA['.mb_convert_encoding($message, 'ISO-8859-1', 'UTF-8').']]></message>
<to_msisdn>+12345678900</to_msisdn>
</sms>
</payload>
</mobilectrl_sms>';
$posturl = MT_URL;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $posturl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml", "Content-length: ".strlen($content), "charset=ISO-8859-1"));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
在它幾乎工作的瀏覽器,我看§°「@#%& /()= +`」^¨* - _:;?,
通知的歐元符號€
但是,當涉及通過文本消息我看到 §?「@#? %& /()= +? ? ^? * - _:。 ; ,
我想不出來,我也嘗試過utf8_decode,但這似乎使情況變得更糟。我錯過了什麼嗎?
感謝
這就是爲什麼ISO-8859- *被認爲是遺留問題,而UTF-8/16被認爲是現有標準中明智和現代的選擇。 – Quentin 2011-03-29 15:51:18
感謝您的回答,我將不得不考慮將這些角色轉換爲接近的東西。它的短信應用程序,顯然很多運營商GSM仍然使用iso-8859,這是在歐洲!我猜沒有人可以給歐元符號發短信。 – bones 2011-03-31 19:37:55