2016-10-02 2 views
0

안녕하세요 여러분 모두 사용자 등록에 관한 신속한 프로젝트를 진행하고 있지만 사용자가 xcode에서 인쇄 한 내용을 입력하면 "ö, ü, ğ"와 같은 특수 문자에 문제가 있습니다. 좋아,하지만 json 문자열을 보낼 때이 형식처럼 변환 중> & oumlmerSwift를 사용하는 특수 문자

어떻게 해결할 수 있습니까? 이 특수 문자에 대한 인코딩을 어떻게 바꿀 수 있습니까?

코드 :

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"); 
} 

고정 (파일 mysql을 연결 .PHP 변경해야 함) :

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()); 
} 
+0

나는 userregister.php 파일에 있다고 생각합니다. 따라서 코드를 공유하십시오. –

+0

Okey, 나는 PHP를 전문가가 아니기 때문에 –

+0

을 추가했지만, 내 생각에 htmlentities()가 그 원인 일 것입니다. http://php.net/manual/en/function.htmlentities.php : "적용 가능한 모든 문자를 HTML 엔티티로 변환" –

답변

0

문제는 htmlentities() 함수입니다. 적용 가능한 모든 문자를 HTML 엔터티로 변환합니다. http://php.net/manual/en/function.htmlentities.php

SQL 삽입을 방지하지 못합니다. 그래서 당신은 그것을 필요로하지 않습니다. 이것을 볼 수 있습니다. How can I prevent SQL injection in PHP?

시도해보십시오.

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()); 
} 
+0

htmlentities 기능을 삭제했지만 데이터베이스에 다음과 같이 입력했습니다. 내 이름은 ¶mer –

+0

데이터베이스 문자 콜렉션이 utf8이 아니거나 데이터베이스 연결이 utf8을 사용하지 않습니다. –

+0

내 데이터베이스 문자 콜렉션은 utf8_general_ci입니다. –