Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Utf-8->php脚本->mysql中进行HTTP POST_Php_Delphi_Unicode - Fatal编程技术网

如何在Utf-8->php脚本->mysql中进行HTTP POST

如何在Utf-8->php脚本->mysql中进行HTTP POST,php,delphi,unicode,Php,Delphi,Unicode,我正在使用Delphi7和ICS组件与php脚本通信,并在mysql数据库中插入一些数据 如何使用http post发布unicode数据 在使用tnt控件中的utf8encode之后,我正在将其发布到PHP脚本中 <?php echo "Note = ". $_POST['note']; if($_POST['action'] == 'i') { /* * This code will add new notes to the database */

我正在使用Delphi7和ICS组件与php脚本通信,并在mysql数据库中插入一些数据

如何使用http post发布unicode数据

在使用tnt控件中的utf8encode之后,我正在将其发布到PHP脚本中

<?php
echo "Note = ". $_POST['note'];

if($_POST['action'] == 'i')
 {
    /*
     *  This code will add new notes to the database
     */
    $sql = "INSERT INTO app_notes VALUES ('', '" . mysql_real_escape_string($_POST['username']) . "', '" . mysql_real_escape_string($_POST['note']) . "', NOW(), '')";
    $result = mysql_query($sql, $link) or die('0 - Ins');
    echo '1 - ' . mysql_insert_id($link);
?>
但当我发布unicode值时,它和我在Tnt备忘录中看到的原始值完全不同

有什么我遗漏的吗

还有人知道如何和印第一起做吗


谢谢。

我希望在不确定的情况下将它们输出为&nnnnn实体,数字为十进制而不是十六进制。。。我想

我希望在不确定的情况下将它们作为&nnnnn实体输出,数字是十进制的,而不是十六进制的。。。我认为

在application/x-www-form-urlencoded中对UTF-8数据进行编码。这将确保服务器可以通过http连接读取数据,并在application/x-www-form-urlencoded中对UTF-8数据进行编码。这将确保服务器可以通过http连接读取数据。示例代码显示了来自TNT Unicode控件的数据。该值的类型为WideString,因此要获取UTF-8数据,应该调用Utf8Encode,它将返回一个AnsiString值。然后对该值调用UrlEncode。确保UrlEncode的输入类型为AnsiString。比如说:

var
  data, date, username, passhash, datahash, note: AnsiString;

date := FormatDateTime('yyyymmddhh:nn',now);
username := Utf8Encode(edtUserName.Text);
passhash := getMd51(edtPassword.Text);
datahash := getMd51(data);
note := Utf8Encode(memoNote.Text);
data := Format('date=%s&username=%s&password=%s&hash=%s&note=%s&action=%s',
               [UrlEncode(date),
                UrlEncode(username),
                UrlEncode(passhash),
                UrlEncode(datahash),
                UrlEncode(note),
                'i'
               ]);
应该不需要对MD5值进行UTF-8编码,因为MD5字符串值只是十六进制字符。但是,您应该仔细检查getMd51函数是否接受WideString。否则,您可能会在将数据发送到任何地方之前丢失数据

接下来,您将遇到在PHP中接收UTF-8数据的问题。我希望在那里或MySQL中没有什么特别需要做的。无论您存储什么,您都应该稍后以相同的方式返回。将其发送回Delphi程序,并将UTF-8数据解码回宽字符串

换句话说,您的Unicode数据在数据库中看起来会有所不同,因为您将其存储为UTF-8。在数据库中,可以看到UTF-8编码的数据,但在TNT控件中,可以看到常规的Unicode字符

例如,如果在编辑框中键入字符ش,即Unicode字符U+0634,阿拉伯语字母sheen。作为UTF-8,这是两字节序列0xD8 0xB4。如果将这些字节存储在数据库中,然后查看字段的原始内容,则可能会看到一些字符被解释为这些字节采用某种ANSI编码。对这些字节的一种可能解释是两个字符的序列Ø',这是带有笔划和锐重音的拉丁文大写字母o

当您从数据库中加载该字符串时,它仍然被编码为UTF-8,就像存储它时一样,因此您需要对其进行解码。据我所知,PHP和MySQL都不会对您的数据进行任何处理,因此您给它们的任何UTF-8字符都会按原样返回给您。如果您使用的是Delphi中的数据,那么就调用Utf8Decode,这是您之前调用的Utf8Encode函数的补充。如果您使用的是PHP中的数据,那么您可能会对PHP的utf8_解码函数感兴趣,尽管它会转换为ISO-8859-1,其中不包括我们的示例阿拉伯字符。堆栈溢出已经有一些与在PHP中使用UTF-8相关的问题,所以我不会在这里尝试添加这些问题。例如:


示例代码显示了来自TNT Unicode控件的数据。该值的类型为WideString,因此要获取UTF-8数据,应该调用Utf8Encode,它将返回一个AnsiString值。然后对该值调用UrlEncode。确保UrlEncode的输入类型为AnsiString。比如说:

var
  data, date, username, passhash, datahash, note: AnsiString;

date := FormatDateTime('yyyymmddhh:nn',now);
username := Utf8Encode(edtUserName.Text);
passhash := getMd51(edtPassword.Text);
datahash := getMd51(data);
note := Utf8Encode(memoNote.Text);
data := Format('date=%s&username=%s&password=%s&hash=%s&note=%s&action=%s',
               [UrlEncode(date),
                UrlEncode(username),
                UrlEncode(passhash),
                UrlEncode(datahash),
                UrlEncode(note),
                'i'
               ]);
应该不需要对MD5值进行UTF-8编码,因为MD5字符串值只是十六进制字符。但是,您应该仔细检查getMd51函数是否接受WideString。否则,您可能会在将数据发送到任何地方之前丢失数据

接下来,您将遇到在PHP中接收UTF-8数据的问题。我希望在那里或MySQL中没有什么特别需要做的。无论您存储什么,您都应该稍后以相同的方式返回。将其发送回Delphi程序,并将UTF-8数据解码回宽字符串

换句话说,您的Unicode数据在数据库中看起来会有所不同,因为您将其存储为UTF-8。在数据库中,可以看到UTF-8编码的数据,但在TNT控件中,可以看到常规的Unicode字符

例如,如果在编辑框中键入字符ش,即Unicode字符U+0634,阿拉伯语字母sheen。作为UTF-8,这是两字节序列0xD8 0xB4。如果将这些字节存储在数据库中,然后查看字段的原始内容,则可能会看到一些字符被解释为这些字节采用某种ANSI编码。这些字节的一种可能解释为两个字符的序列Ø',即La 锡制大写字母o,带有笔划,后跟尖锐的重音

当您从数据库中加载该字符串时,它仍然被编码为UTF-8,就像存储它时一样,因此您需要对其进行解码。据我所知,PHP和MySQL都不会对您的数据进行任何处理,因此您给它们的任何UTF-8字符都会按原样返回给您。如果您使用的是Delphi中的数据,那么就调用Utf8Decode,这是您之前调用的Utf8Encode函数的补充。如果您使用的是PHP中的数据,那么您可能会对PHP的utf8_解码函数感兴趣,尽管它会转换为ISO-8859-1,其中不包括我们的示例阿拉伯字符。堆栈溢出已经有一些与在PHP中使用UTF-8相关的问题,所以我不会在这里尝试添加这些问题。例如:


我这样做了,但当我发布ش时,我在mysql数据库中得到了Ø´1,作为响应?我的另一个问题是php是如何从http接受uft-8的?我是这样做的,但当我发布ش时,我在mysql数据库中得到了Ø´1作为响应?我的另一个问题是php是如何从http接受uft-8的?