簡體   English   中英

iOS上的MySQL編碼問題

[英]MySQL encoding problems on iOS

因此,我正在構建一個將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);

就在昨天,我也遇到了一個類似的問題,那就是智能引號和其他unicode字符。 對我來說,解決方案是確保將MySQL連接以及表和HTML設置為UTF-8。 這是一個例子:

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

我從您的其他評論之一中收集到您正在SET NAMES來設置字符集:

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

但是,顯然,您將需要使用mysqli_real_escape_string或將值手動綁定到? SQL中的占位符,以保護自己免受SQL注入攻擊以及在字段中更無辜地使用撇號。

但是,如果執行參數的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語法也mysqli_set_charset

有關SET NAMESmysqli_set_charset之間不同行為的注釋,請參見“ 字符集概念”討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM