1

喂!

我试图在 Windows 中创建网络服务。

客户端是Delphi 6,调用MSXML2.XMLHTTP,另一端是PHP。

首先我测试:我可以接收匈牙利 XML 吗?

PHP 源代码是 UTF-8 编码文件 (PSPAD)。

$s = 'alma árvíztűrő tükörfúrógép beta';
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$m = $doc->createElement('package');
$doc->appendChild($m);
$n = $doc->createElement('Msg');
$m->appendChild($n);
$n->nodeValue = $s;
$xs = $doc->saveXML();
header('Content-Type: text/xml');
echo($xs);

这个包我完全在Delphi方面得到的,口音还可以。

因此,我尝试从 xml 注入数据(将 xml 发布到带有重音符号的 php)。

global $HTTP_RAW_POST_DATA;
$xmlstr = $HTTP_RAW_POST_DATA;
$xml = new SimpleXMLElement($xmlstr);
$msg = $xml->msg;
#$msg = 'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP';

好的,我得到了“msg”字段,但是我尝试转换它,每次我得到一些转换通知,结果与我直接设置变量时的结果不同......

调试是:

echo(utfCharToNumber($sinput).'<br>');
echo(utfCharToNumber($sdefined).'<br>');

Input:   195[   ]8286195141908419717682197[   ]328419
Defined: 195[129]8286195141908419717682197[144]328419
Input:   5156751951508270195154821951477119513780<br>
Defined: 5156751951508270195154821951477119513780<br>

如您所见,当我从 MSXML2 转换输入时,变量中有两个孔。

我真的不明白这个。

从输入 XML 中获取数据时,我无法重现与直接在 PHP 代码中设置时相同的 XML 输出...

为什么?

感谢您的每一个帮助、想法、链接、文档、小例子!

dd

4

2 回答 2

0

由于您没有包含 Delphi 源,我怀疑您是直接从字符串发布数据作为请求的内容主体,在 Delphi 6 中默认情况下以当前的 ANSI 编码编码。我建议您Utf8Encode之前在字符串上使用您将其添加为请求的正文数据,或添加带有 ANSI 编码名称的“内容编码”请求标头(如果我没记错的话GetLocaleInfo可以给您这个)。

于 2012-06-11T15:26:31.990 回答
0

问题的根源在于 Delphi 代码。

之前我使用 AnsiToUTF8 对 XML 文本进行编码。但我认为 COM 对象使用的是 UTF16。

工作代码是这样的:

procedure TForm1.Button4Click(Sender: TObject);
var
    mhttp : variant;
    ws : WideString;
    tosend : OleVariant;
    xml : TXMLDocument;
    n : IXMLNode;
begin
    mhttp := CreateOleObject('MSXML2.XMLHTTP');
    mhttp.Open('POST', 'http://127.0.0.1/test_xmlgen.php', False);

    xml := CreateANewDocument(Self, '', 'a');
    n := xml.DocumentElement.AddChild('msg');
    n.NodeValue := 'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP';
    xml.SaveToXML(ws);
    tosend := ws;

    mhttp.send(tosend);
    Memo1.Lines.Text :=
        IntToStr(mhttp.Status) + #13 +
        mhttp.responseText + #13;
end;

这可以重新发送我发送的 XML - 带有良好的口音。

感谢您的帮助:dd

于 2012-06-27T14:34:57.737 回答