【问题标题】:curl being sent as UTF-8 should be ISO-8859-1curl 作为 UTF-8 发送应该是 ISO-8859-1
【发布时间】:2014-02-05 17:40:13
【问题描述】:

用这个发送文件:

$xml_file = 'myfile.xml';
$research_xml_url = "http://mydomain.com/receive.php";
$curl_resource = curl_init($research_xml_url);

curl_setopt($curl_resource, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($curl_resource, CURLOPT_ENCODING, 'ISO-8859-1'); // Doesn't seem to work
curl_setopt($curl_resource, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_resource, CURLOPT_POST, 1);
curl_setopt($curl_resource, CURLOPT_TIMEOUT, 360);
curl_setopt($curl_resource, CURLOPT_HEADER, 0);
curl_setopt($curl_resource, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl_resource, CURLOPT_URL, $research_xml_url);

$cwd = getcwd();
chdir($cwd);

$file_to_send = array('xml' => "@" . $cwd .'/'.  $xml_file);
curl_setopt($curl_resource, CURLOPT_POSTFIELDS, $file_to_send);
$incoming_xml = curl_exec($curl_resource);

if (curl_error($curl_resource)) {
    echo curl_error($curl_resource)  ;
} else {
    print_r($incoming_xml, TRUE);
}

$curl_arr = curl_getinfo($curl_resource);
print_r($curl_arr, TRUE);
curl_close($curl_resource);

它打印出这个,说明 UTF-8,但它的结尾 XML 编码为 ISO-8859-1 ():

Array
(
    [url] => http://mydomain.com/receive.php
    [content_type] => text/html; charset=UTF-8
    [http_code] => 200
    [header_size] => 216
    [request_size] => 273
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.029465
    [namelookup_time] => 4.5E-5
    [connect_time] => 0.005916
    [pretransfer_time] => 0.006021
    [size_upload] => 3990
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 135414
    [download_content_length] => 0
    [upload_content_length] => 3990
    [starttransfer_time] => 0.012331
    [redirect_time] => 0
)

这是接收脚本:

$postText = file_get_contents('php://input');
$outp = fopen("files/xmlfile" . date("YmdHis") . ".xml", "w");
fwrite($outp, $postText);
fclose($outp);

如何强制 curl 作为 ISO-8859-1 发送?

curl_setopt($curl_resource, CURLOPT_ENCODING, 'ISO-8859-1');

好像没用

【问题讨论】:

    标签: php curl encoding utf-8 character-encoding


    【解决方案1】:

    CURLOPT_ENCODING 用于将"Accept-Encoding:" 标头设置为“identity”、“deflate”和“gzip”等值。

    如果您想以特定编码发送 XML 数据,您需要将您的 $research_xml_url 从其当前编码转换为您需要的编码。比如iconv()函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多