Php iOS上的MySQL编码问题

Php iOS上的MySQL编码问题,php,mysql,ios,utf-8,encode,Php,Mysql,Ios,Utf 8,Encode,所以我正在构建一个PHP站点,将POST变量插入MySQL数据库。整个网站用UTF8编码,以支持希伯来文文本 它在桌面上运行得非常好,但在iOS中,由于某些原因,该站点会胡言乱语地插入变量 这是PHP代码示例: $con=mysqli_connect("xxx","xxx","xxx","xxx"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_c

所以我正在构建一个PHP站点,将POST变量插入MySQL数据库。整个网站用UTF8编码,以支持希伯来文文本

它在桌面上运行得非常好,但在iOS中,由于某些原因,该站点会胡言乱语地插入变量

这是PHP代码示例:

$con=mysqli_connect("xxx","xxx","xxx","xxx");
// Check connection
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$fullPhone=$_POST[prefix].''.$_POST[phone];
$sql="INSERT INTO testtab (fbName, fbId, fbComment, name, email, phone)
VALUES('$_POST[fbName]','$_POST[fbID]','$_POST[fbComment]','$_POST[name]','$_POST[email]','$fullPhone')";

if (!mysqli_query($con,$sql))
{
  die('Error: ' . mysqli_error($con));
}

mysqli_close($con);

就在昨天,我在智能引号和其他unicode字符方面遇到了类似的问题。我的解决方案是确保MySQL连接设置为UTF-8以及表和HTML。以下是一个例子:

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to the database');

if (!mysql_set_charset('utf8', $conn)) {
    echo "Error: Unable to set the character set.\n";
    exit;
}

将此添加到您的连接:

//if i want to work with hebrew databases
mysql_query("SET NAMES 'utf8'",$connection);//reading hebrew from phpadmin database - only for hebrew sites
像这样:

$con=mysqli_connect("xxx","xxx","xxx","xxx");
// Check connection
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

//if i want to work with hebrew databases
mysql_query("SET NAMES 'utf8'",$con);//reading hebrew from phpadmin database - only for hebrew sites

$fullPhone=$_POST[prefix].''.$_POST[phone];
$sql="INSERT INTO testtab (fbName, fbId, fbComment, name, email, phone)
VALUES('$_POST[fbName]','$_POST[fbID]','$_POST[fbComment]','$_POST[name]','$_POST[email]','$fullPhone')";

if (!mysqli_query($con,$sql))
{
  die('Error: ' . mysqli_error($con));
}

mysqli_close($con);

我从您的另一条评论中了解到,您正在执行
设置名称
来设置字符集:

$con->query("SET NAMES 'utf8'");
不过,显然,您需要使用
mysqli\u real\u escape\u string
或手动将值绑定到SQL中的
占位符,以防止在字段中更无辜地使用撇号

但是,如果执行参数设置,则可能需要使用而不是上面的
SET name
SQL:

$con->set_charset('utf8');
另一方面,如果您通过在SQL中使用
占位符来解决SQL注入问题,然后使用将值绑定到这些占位符,那么我认为使用
mysqli\u set\u charset
set NAMES
SQL语法并不重要


有关
集合名称
mysqli_SET_charset
之间不同行为的说明,请参见讨论。举一两个例子说明数据是如何被破坏的。还有,“网站在胡言乱语中插入变量”,但你在哪里看到这种胡言乱语?在iOS应用程序中?iOS上的数据是如何显示的?当我在PHP文件中打印表格时,我看到了乱七八糟的信息。所有来自PC的希伯来语信息都显示正确,但来自ios的信息都显示为符号。顺便说一句,不要只使用这些
$\u POST
值构建SQL:调用
mysqli\u real\u escape\u string
或将值绑定到
占位符。是的,很好。如果您不提供有关数据如何在iOS设备上输入和/或显示的任何信息,那么仍然很难确定iOS角度。如果这就是坏数据的来源,那么关于如何创建和传输数据的一些细节似乎至关重要。嘿,Rob,mysqli\u real\u escape\u string阻止了什么?使用$u POST值有什么风险?我使用$con->query(“设置名称'utf8'”);它解决了这个问题。非常感谢!!有很多有用的信息让我知道。非常感谢你!