所以我正在构建一个将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);
答案 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_charset
或SET NAMES
SQL语法。
有关SET NAMES
和mysqli_set_charset
之间不同行为的说明,请参阅Character Sets Concepts讨论。