簡體   English   中英

Swift特殊字符(固定在主帖子底部)

[英]Special Characters with Swift(Fixed check bottom of the main post)

大家好,我有一個關於用戶注冊的快速項目,但是當用戶輸入的特殊字符“ö,ü,ğ”存在問題時,我用xcode ok打印了這些字符,但是發送的json字符串轉換為ömer>&oumlmer

我怎樣才能解決這個問題 ? 我如何更改此特殊字符的編碼。

代碼:

let request = NSMutableURLRequest(url: (URL(string: "xxxx.com/userregister.php") )! );
request.httpMethod = "POST";
let userstring = "My name is ömer";  
print(userstring)  //Everything okey printing : My name is Ömer
requst.httpBody=userstring.data(using: .utf8)    //I think problem is here.Its saving to database like : My name is &oumlMer

UserRegister.php

<?php 
require("Conn.php");
require("MySQLDao.php");

$email = htmlentities($_POST["email"]);
$password = htmlentities($_POST["password"]);
$name = htmlentities($_POST["name"]);
$gsm = htmlentities($_POST["gsm"]);
$onayid = "0";
$surname = htmlentities($_POST["surname"]);
$qrcodeid = htmlentities($_POST["qrcodeid"]);
$returnValue = array();

if(empty($email) || empty($password))
{
$returnValue["status"] = "error";
$returnValue["message"] = "Missing required fieldd";
echo json_encode($returnValue);
return;
}

$dao = new MySQLDao();
$dao->openConnection();
$userDetails = $dao->getUserDetails($email);

if(!empty($userDetails))
{
$returnValue["status"] = "error";
$returnValue["message"] = "User already exists";
echo json_encode($returnValue);
return;
}

$secure_password = md5($password); // I do this, so that user password cannot be read even by me

$result = $dao->registerUser($email,$secure_password,$name,$gsm,$onayid,$surname,$qrcodeid);

if($result)
{
$returnValue["status"] = "Success";
$returnValue["message"] = "User is registered";
echo json_encode($returnValue);
return;
}

$dao->closeConnection();

?>

連接代碼:

public function openConnection() {
$this->conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
    mysql_query("SET character_set_results=utf8", $this->conn);
    mb_language('uni'); 
    mb_internal_encoding('UTF-8');
    mysql_select_db($dbname, $this->conn);
    mysql_query("set names 'utf8'",$this->conn);
if (mysqli_connect_errno())
echo new Exception("Could not establish connection with database");
}

固定(必須更改.php文件mysql連接):

if (!$this->conn->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $this->conn->error);
    exit();
} else {
    printf("Current character set: %s\n", $this->conn->character_set_name());
} 

問題是htmlentities()函數。 它將所有適用的字符轉換為HTML實體。 http://php.net/manual/zh/function.htmlentities.php

它不會阻止SQL注入。 因此,您不需要它。 你可以看這個。 如何防止PHP中進行SQL注入?

嘗試這個。

if (!$this->conn->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $this->conn->error);
    exit();
} else {
    printf("Current character set: %s\n", $this->conn->character_set_name());
}

暫無
暫無

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

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