我有一个PHP脚本,它通过Salesforce从Salesforce获取数据,并使用file_put_contents将输出写入文件。数据是韩国字符和英语字符的混合体。
当我在运行版本4 (Nahant 8)和PHP 5.2.8以及运行PHP5.3.6的类似框(2)上运行脚本时,韩文字符之间的空格就消失了。
例如(用K表示韩文字符,用E表示英文字符)
KKKK正在以EEEEEEEEKKKKKKKK KKK出现
但是,当我在一个用PHP 5.3.5运行CentOs的框(3)上运行脚本时,或者在我的本地windows机器上运行PHP5.3.6时,文件中的文本是正确的。
有人能告诉我问题出在哪里吗?
编辑--最初我是通过浏览器访问php脚本,但为了(希望)简化问题,我目前正在将输出存储在文本文件中并将其下载到我的windows机器。
编辑-十六进制版本
原始文本-CFD란무엇입니까?
(1) - 43 46 44 eb 9e 80 eb ac b4 ec 97 87 ec 9e 85 eb 8b 88 ea b9 8c 3f
六角来自(3) - 43 46 44 eb 9e 80 20 eb ac b4 ec 97 87 ec 9e 85 eb 8b 88 ea b9 8c 3f
编辑-用于选择文本的代码(用户、传递、表、id和路径省略)
<?php
ini_set("soap.wsdl_cache_enabled", "0");
require_once ("../soapclient/SforcePartnerClient.php");
require_once ("../soapclient/SforceHeaderOptions.php");
$partner_wsdl = "../soapclient/new-partner.wsdl.xml";
$client = new SforcePartnerClient();
$client->createConnection($partner_wsdl);
$loginResult = $client->login('--user--', '--pass--');
$query = "Select Name FROM --table-- WHERE Id = '--id--'";
$response = $client->query($query);
echo'<pre>';print_r($response);echo'</pre>';
$queryResult = new QueryResult($response);
foreach ($queryResult->records as $qr) {
$content = $qr->fields->Name;
file_put_contents('--path--',$content);
}
?>发布于 2011-07-28 17:18:12
经过更多的研究,我在SforcePartnerClient.php中发现了一个函数
$QueryResult = $this->sforce->query(array ('queryString' => $query))->result;根据所使用的框返回不同的值。
方框1和2:
<sf:Name>CFD란 무엇입니까?</sf:Name>方框3和4:
<sf:Name>CFD란 무엇입니까?</sf:Name>当它与使用XML解析器(文件后面的部分)和WSDL文件结合/解析/转换时,XML解析器删除了在连续的&#xxxxx;s之间发生的任何空白-我相信这与bug https://bugs.php.net/bug.php?id=33240有关,以避免这一点,我建议注释掉SforcePartnerClient.php的第364行。
xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );不幸的是,我不知道这是否会对使用SforcePartnerClient.php的其他代码产生任何不利影响。
https://stackoverflow.com/questions/6764584
复制相似问题