CJK白色空间字符消失

时间:2011-07-20 15:38:08

标签: php whitespace cjk

我有一个PHP脚本,它通过Salesforce API从Salesforce获取数据,并使用file_put_contents将输出写入文件。数据是韩文字符和英文字符的混合。

当我在运行带有PHP 5.2.8的Red Hat Enterprise Linux ES版本4(Nahant Update 8)和运行PHP 5.3.6的类似框(2)的框(1)上运行脚本时,韩文之间的空格人物消失了。

e.g。 (使用K表示韩文字符,使用E表示英文字符)

EEEEEEEEK KKK KKKK EEE KKKK出现在EEEEEEEEKKKKKKKK EEE KKKK

然而,当我在运行带有PHP 5.3.5的CentO的盒子(3)上运行脚本时,或者使用PHP 5.3.6在我的本地Windows机器上运行脚本时,文件中的文本是正确的。

任何人都可以提出问题所在吗?

编辑 - 最初我是通过浏览器访问php脚本但是(希望)简化我目前将输出存储在文本文件中并将其下载到我的Windows机器的问题。

编辑 - 十六进制版

原文 - 差价合约란무엇입니까?

Hex from(1) - 43 46 44 eb 9e 80 eb ac b4 ec 97 87 ec 9e 85 eb 8b 88 ea b9 8c 3f

Hex from(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);
}
?>

1 个答案:

答案 0 :(得分:0)

经过更多研究后,我在SforcePartnerClient.php中发现了一个函数

$QueryResult = $this->sforce->query(array ('queryString' => $query))->result;

根据使用的框返回不同的值。

方框1和2:

<sf:Name>CFD&#xB780; &#xBB34;&#xC5C7;&#xC785;&#xB2C8;&#xAE4C;?</sf:Name>

专栏3和4:

<sf:Name>CFD란 무엇입니까?</sf:Name>

当使用XML解析器(稍后在文件中)和WSDL文件组合/解析/转换时,XML解析器会剥离连续&amp; #xxxxx之间出现的任何空白区域; s - 我认为这与一个错误https://bugs.php.net/bug.php?id=33240有关,以避免这种情况我建议评论出SforcePartnerClient.php的第364行

xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );

不幸的是,我不知道这是否会对使用SforcePartnerClient.php的其他代码产生任何不利影响。