WinHttpRequest POST

问题描述 投票:4回答:1

我正在尝试使用VBA中的WinHttpRequest从我的在线mySQL服务器读取数据。

Dim objHTTP As New WinHttp.WinHttpRequest
With objHTTP
    .Open "POST", "http://www.dname.com/ruski/php/getNewestPID.php", True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=""UTF-8"""
    .Send "PID=" & lngPID
    .WaitForResponse
    Debug.Print .ResponseText
End With
<?php
$PID = $_POST['PID'];

require_once ('config.php'); 

if(!$PID>0){
    die("##### Error: getNewestPID failed - PID='" . $PID . "'  #####");
}

$phrases = mysql_query("SELECT * FROM phrases WHERE (PID > '$PID')");

if(!$phrases){
    die("##### Error: getNewestPID SELECT failed - PID=" . $PID . " - " . mysql_error() . "  #####");
}

mysql_close($db);

echo "data=";
while($row = mysql_fetch_array($phrases)) {
    echo $row[0] . "|" . $row[1] . "|" . $row[2] . "|" . $row[3];
}
?>

一切正常,但是返回西里尔字母,如:

data = 21361 | 105 ||Ð?алÑ?Ñ?икигÑ?? ÐÐÑ?¸¿¿µ

我的数据库使用UTF-8 Unicode。我知道西里尔文在表格和表格中起作用,但是在VB编辑器中会看到垃圾。

我尝试过:

Set FileStream = CreateObject("ADODB.Stream")
FileStream.Open
FileStream.Type = 1 'Binary
FileStream.Write objHTTP.ResponseBody
FileStream.Position = 0
FileStream.Type = 2 'adTypeText
FileStream.Charset = "Windows-1251"  ' https://msdn.microsoft.com/en-us/library/ms526296(v=exchg.10).aspx
strText = FileStream.ReadText
FileStream.Close

在记录中出现垃圾:

[МальчикиграаеѺ

最佳结果是:

mb_convert_encoding($ row [3],“ Windows-1251”,“ UTF-8”)

[

我正在尝试使用VBA中的WinHttpRequest从我的在线mySQL服务器读取数据。将objHTTP设为新的WinHttp.WinHttpRequest并添加objHTTP。打开“ POST”,“ http://www.dname.com/ruski/php/getNewestPID ....

php mysql vba winhttp
1个回答
0
投票
这不是很好,但是当我遇到类似问题时,它对我有用。它只是一个将从1251手动转换为Unicode的函数。该代码适用于俄语和乌克兰语,但是根据您使用的语言,可能会有不同的字符,您需要将它们添加到if语句中。如果找不到所需的字符,也可以考虑添加else,如果引发问号,则添加其他字符。

Public Function AsciitoUni(base_cell As String) As String AsciitoUni = "" For i = 1 To Len(base_cell) Dim s As String Dim u As Integer Dim a As Integer s = Mid(base_cell, i, 1) a = Asc(s) If (a <= 127) Then u = a ElseIf (a >= 192) And (a <= 255) Then u = a + 848 ElseIf (a = 184) Then u = 1105 ElseIf (a = 186) Then u = 1108 ElseIf (a = 179) Then u = 1110 ElseIf (a = 191) Then u = 1111 ElseIf (a = 168) Then u = 1025 ElseIf (a = 170) Then u = 1028 ElseIf (a = 178) Then u = 1030 ElseIf (a = 175) Then u = 1031 ElseIf (a = 185) Then u = 8470 End If AsciitoUni = AsciitoUni & ChrW(u) Next End Function

© www.soinside.com 2019 - 2024. All rights reserved.