如何在C#.NET,PHP和MySQL之间获得通用编码?

时间:2013-10-19 10:23:59

标签: c# php mysql encoding character-encoding

我有一个C#-Application,它将数据发送到php,php将数据存储到mysql数据库中。如果我有一个äöü或其他一些东西(我正在编码它,那么字符串中也包含&%$/")=!)它将作为È└/或其他东西存储在数据库中像那样。所以它定义为编码问题。我该如何解决?

修改
我使用这些代码:
C#:

WebClient.DownloadString(apiString + "sendMessage.php?user=" + user + "&message=" + message);

PHP:

$verbindung = mysql_connect("nightking.org", "username", "password");
mysql_select_db("apidb");
$ergebnis = mysql_query("INSERT INTO `apidb`.`tm_chatdata` (`username` ,`time` ,`message`) VALUES ('" . $_GET['message'] . "',CURRENT_TIMESTAMP , '" . $_GET['user'] . "');");

当我再次调用值时:

PHP:

$verbindung = mysql_connect("nightking.org", "username", "password");
mysql_select_db("apidb");
$ergebnis = mysql_query("(SELECT * FROM `tm_chatdata` ORDER BY time DESC LIMIT 38)ORDER BY time ASC;");
$firstOne = true;
while($row = mysql_fetch_object($ergebnis))
{
    if($firstOne)
        $firstOne = false;
    else
    {
        echo "\r\n";
    }
    if($row->username == "system")
    {
        echo "[" . $row->message . "]";
    }
    else
    {
        if($row->username == "command")
        {
            echo "*".$row->message;
        }
        else
        {
            echo /* $row->time . " " . */$row->username . ": " . $row->message;
        }
    }
}

C#:

WebClient.DownloadString(apiString + "getMessages.php");

现在,MySQL排序规则类型已更改为utf8_bin,但仍无效。

1 个答案:

答案 0 :(得分:2)

您需要审核应用程序中的数据通过的路径。

从C#land开始,您可能正在使用HttpWebRequest将数据发送到PHP脚本。如果您只设置查询字符串或HTTP标头值,那么您不需要编码任何内容:HttpWebRequest将为您执行此操作。如果您使用request.GetRequestStream设置POSTdata,那么它取决于您正在进行的表单提交类型,though HTML5 states by default this should be UTF-8将非ASCII字符转换为数字值。请注意,这只涉及线上格式,PHP环境将自动为您处理。

PHP没有对Unicode的内置支持:所有字符串都可以被视为单字节数组,因此如果它们不被操作,那么它们将按字节保存数据。要进行操作,请使用mbstring扩展名。

MySQL提出了另一个问题,因为它允许每表编码。默认值为latin1,但为了保持一致,我建议将其设置为utf8utf16。更糟糕的是:你必须contend with connection encoding too

所以确实没有任何简单的答案,但我建议确保一切都是一致的:

  • 确保您的C#应用​​程序中的HTTP客户端声明了编码方法(字符编码和字符的实际“数字编码”)。
  • 确保您没有在PHP中以不安全的方式操作多字节字符串,并且您正在以与C#程序在传入请求的HTTP头中声明的编码一致的方式处理它们。
  • 确保您的MySQL表都使用相同的编码并且它是适当的编码(例如utf8或utf16),并且如果传入数据具有不同的编码,那么在将其保存到数据库之前,您将相应地进行转换。