CJK исчезают символы белого пространства - PullRequest
3 голосов
/ 20 июля 2011

У меня есть PHP-скрипт, который извлекает данные из Salesforce через Salesforce API и записывает вывод в файл, используя file_put_contents. Данные представляют собой смесь корейских и английских символов.

Когда я запускаю сценарий на боксе (1), работающем под управлением Red Hat Enterprise Linux ES версии 4 (Nahant Update 8) с PHP 5.2.8, и аналогичном ящике (2), работающем на PHP 5.3.6, пробелы между корейцами символы исчезают.

например. (Использование K для обозначения корейского символа и E для обозначения английского символа)

EEEEEEEEK KKK KKKK EEE KKKK отображается как EEEEEEEEKKKKKKKK EEE KKKK

Однако, когда я запускаю сценарий на коробке (3), на которой запущены CentO с PHP 5.3.5 или (4) на моей локальной машине Windows с PHP 5.3.6, текст в файле правильный.

Кто-нибудь может подсказать, в чем может быть проблема?

РЕДАКТИРОВАТЬ - Первоначально я обращался к php-скрипту через браузер, однако (надеюсь) упростил задачу, которую я в настоящее время сохраняю в текстовом файле, и загружаю его на мой компьютер с Windows.

РЕДАКТИРОВАТЬ - шестнадцатеричная версия

Оригинальный текст - CFD 란 무엇 입니까?

Шестнадцатеричное от (1) - 43 46 44 отлив 9e 80 от пр. B4 ec 97 87 ec 9e 85 отлив 8b 88 ea b9 8c 3f

Hex из (3) - 43 46 44 отлив 9e 80 20 отлив AC B4 EC 97 87 EC 9E 85 отлив 8b 88 EA B9 8C 3F

РЕДАКТИРОВАТЬ - Код, используемый для выбора текста (без имени пользователя, пропуска, таблицы, идентификатора и пути)

<code><?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'
'; $ queryResult = new QueryResult ($ response); foreach ($ queryResult-> записывает как $ qr) { $ content = $ qr-> fields-> Name; file_put_contents ( '- путь -', $ содержание); } ?>

1 Ответ

0 голосов
/ 28 июля 2011

После дополнительных исследований я обнаружил функцию в SforcePartnerClient.php

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

возвращает различные значения в зависимости от используемого поля.

Box 1 и 2:

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

Рамки 3 и 4:

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

Когда это комбинируется с / анализируется / конвертируется с использованием синтаксического анализатора XML (далее в файле) и файла WSDL, синтаксический анализатор XML удаляет любые пробелы, возникающие между последовательными символами & # xxxxx; s - я считаю, что это связано с ошибкой https://bugs.php.net/bug.php?id=33240, чтобы избежать этого, я предлагаю закомментировать строку 364 файла SforcePartnerClient.php

xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );

К сожалению, я не знаю, окажет ли это какое-либо неблагоприятное влияние на другой код, использующий SforcePartnerClient.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...