2014-12-31 8 views
0

터키어 문자가 포함 된 문자열을 삽입하는 데 문제가 있습니다. 문자열로 "öçşığüÖÇŞİĞÜ"을 삽입하려고합니다.PHP로 MySQL 데이터베이스에 삽입하는 동안 터키어 문자 문제

header("Content-Type: text/html; charset=windows-1254"); 

나는 (그것이 중요하지 않지만, 나는 그것을 쓰기)와 아약스에서 데이터를 얻을 여기

$json = filter_input_array(INPUT_POST); 

은 다음과 같습니다

나는 PHP 파일의 머리에 아래에 표시된 라인을 넣어 삽입 명령 :

$query = "INSERT INTO users (name) VALUES ('" . $user->get_name() . "')"; 

이제 변수에 값을 할당하는 두 가지 사례를 시도했습니다 :

CASE 1

  1. PHP : $ 이름 = $의 JSON [ '이름'];
  2. 브라우저 : Ã¶Ã§ÅŸÄ ± ğüÃ-A ‡ AA ° ÄÃœ
  3. 데이터베이스 : Ã§ÅŸÄ ± ğüÃ-A ‡ 아자 ° ĞÜ

CASE 2

  1. php : $ name = iconv ("UTF-8", "ISO-8859-9", $ json [ 'name']);
  2. 브라우저 : öçşığüÖÇŞİĞÜ
  3. 데이터베이스 : çþýðüÖÇÞÝÐÜ

"1"문자열의 내 할당 유형입니다, "2"의 결과 "가 $ 사용자 - 에코> get_name();" "1"의 배정에 따라, "3"은 데이터베이스 셀의 값입니다. 나는 CASE 2에서 "echo"에 참된 결과를 얻을 수 있지만 손상된 결과는 데이터베이스에 삽입됩니다. 내 DB 데이터 정렬은 "utf8_turkish_ci"입니다.

(PHP 5.2.18, MySQL은 5.6.13)

답변

2

이 문제는 어딘가에서 문자 인코딩을 지정하지 못한 것처럼. 이 문제를 해결하려면 문자 인코딩을 utf-8 everywere (실제로 utf-8 일 필요는 없습니다. 같은 곳에서과 같은 문자 인코딩을 설정했는지 확인하십시오.하지만 뭔가 혼란 스러우면 필요하다면 어쨌든 일부 장소를 변경하려면 utf-8을 사용하는 것이 좋습니다.) :

  • utf-8을 사용하도록 MySQL에 알립니다. 이것을하기 위해서, 당신의 저에게 이것을 추가하십시오.CNF는 :

    collation_server = utf8_unicode_ci 
    character_set_server = utf8 
    
  • MySQL과 상호 작용하기 전에,이 두 querys을 보내 : 또는

    SET NAMES 'utf8'; 
    CHARSET 'utf8'; 
    

    또는, PHP를하자이 afteropening 연결 :

    mysql_set_charset('utf8', $conn); 
    
  • 세트 UTF-8 데이터베이스

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8'; 
    
  • 의 디폴트 캐릭터 세트와 같은 테이블에 대해 동일한 작업을 수행합니다

    CREATE TABLE `my_table` (
        -- ... 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    
  • 클라이언트를 가정 브라우저이고 콘텐츠를 utf-8로 게재하고 올바른 헤더 :

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    
  • 하고, 마지막으로는 말할 :

    header('Content-type: text/html; charset=utf-8'); 
    

    이 메타 태그를 추가, 브라우저가 이해 정말 확인하기 브라우저가 utf-8을 사용하여 양식 제출

    <form accept-charset="utf-8" ...> 
    

여기 또는 smiler 질문을 확인하십시오. MYSQL - Turkish character

1

난 당신이

mysql_query("set names 'utf8'"); 

예를 들어, PHP를 사용해야 당신이 MySQL의 일부

header('Content-Type: text/html; charset=utf-8'); 

을 시도하십시오 utf-8을 사용 생각

<html> 
    <head> 
     <title>Title</title> 
     <meta charset="UTF-8" /> 
    </head> 
    <body> 
    <?php 
      mysql_query("set names 'utf8'"); 
      $sql = "select name from users"; 
      //........ 
      //........ 
      //echo "abc";   
    ?>  

    </body> 
<html> 
+0

이 솔루션은 db에 null을 삽입했습니다. 반면에 메아리는 "?" 각 문자 대신 물음표. – JoshuaJeanThree

2

utf-8을 사용하는 경우이 문제가 발생하지 않습니다.

내 제안은 utf8로 인코딩 변환입니다.

1

당신은이 테이블에 대한 쿼리하기 전에 MySQL의 쿼리를 추가해야합니다 :

SET NAMES 'utf8_turkish_ci'/SET NAMES 'ISO-8859-9' 

또는

$params = [ 
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'ISO-8859-9\'', 
]; 
$pdo = new PDO($dsn, $username, $passwd, $params]; 

그 위해의 iconv 사용하지 마십시오.

0

난 단지

  • 의 iconv()를 제거하여 해결은
  • 는 "('; 문자셋 = UTF-8 텍스트/HTML의 Content-Type'); 헤더"로 이전 헤더를 대체 전환 수 다른 회원들에 의해 위에 표시된 바와 같이.

감사합니다.