iOS上的MySQL编码问题

时间:2014-01-04 19:16:07

标签: php mysql ios utf-8 encode

所以我正在构建一个将POST变量插入MySQL数据库的PHP站点。整个网站以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);

3 个答案:

答案 0 :(得分:0)

昨天我在智能引号和其他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;
}

答案 1 :(得分:0)

将此添加到您的连接中:

//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);

答案 2 :(得分:0)

我从你的其他评论中收集到你正在SET NAMES设置字符集:

$con->query("SET NAMES 'utf8'");

但是,显然,您需要使用mysqli_real_escape_string或手动将值绑定到SQL中的?占位符,以保护自己免受SQL injection attacks的攻击,以及更加无辜地使用在你的领域撇号。

但是,如果您执行参数的mysqli_real_escape_string,则可能需要使用mysqli_set_charset而不是上面的SET NAMES SQL:

$con->set_charset('utf8');

另一方面,如果您通过在SQL中使用?占位符来解决SQL注入问题,然后使用mysqli_stmt_bind_param将值绑定到这些占位符,那么我认为这不重要如果您使用mysqli_set_charsetSET NAMES SQL语法。

有关SET NAMESmysqli_set_charset之间不同行为的说明,请参阅Character Sets Concepts讨论。