我有一个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,但仍无效。
答案 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
,但为了保持一致,我建议将其设置为utf8
或utf16
。更糟糕的是:你必须contend with connection encoding too。
所以确实没有任何简单的答案,但我建议确保一切都是一致的: