2017-11-11 4 views
0

json을 사용하여 데이터베이스에서 변수를 반향합니다. 그러나 ë를 (를) 표시합니다. 행운으로UTF-8 문자가 JSON 형식으로 올바르게 표시되지 않습니다.

: 나는이 작업을 수행 한이 문제를 해결하기위한 시도에서

. 모든 아이디어를 수정하는 방법.

편집 :

if (isset($_GET['term'])){ 
$return_arr = array(); 

try { 
    $conn = new PDO("mysql:host=".DB_SERVER.";port=8889;dbname=".DB_NAME, DB_USER, DB_PASSWORD); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $stmt = $conn->prepare('SELECT School FROM Schools WHERE School LIKE :term'); 
    $stmt->execute(array('term' => '%'.$_GET['term'].'%')); 

    while($row = $stmt->fetch()) { 
     $return_arr[] = $row['School']; 
    } 

} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 


/* Toss back results as json encoded array. */ 

echo mb_detect_encoding($return_arr, 'auto'); 

} 
+2

당신이'JSON_UNESCAPED_UNICODE' 플래그를 생각 해 봤나? http://php.net/manual/en/function.json-encode.php를 참조하십시오. –

+0

시도했지만 여전히 동일한 결과가 나타납니다. –

+0

echo mb_detect_encoding ('■', 'auto'); 이미 UTF-8이라는 것을 반환합니다. JSON_UNESCAPED_UNICODE는 "\ xc3 \ xa9"가 é에 대한 이스케이프 처리되지 않은 유니 코드임을 알려주지 않습니다. 문제가 데이터베이스 문자 세트 – miknik

답변

1

먼저 테이블이 utf8으로 인코딩되어 있는지 확인하십시오.

$dsn = 'mysql:dbname=test;host=127.0.0.1;port=3306;charset=utf8'; 
$user = 'root'; 
$password = 'password'; 
$conn = new PDO($dsn, $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]); 

마지막 JSON_UNESCAPED_UNICODE을 사용합니다 :

CREATE TABLE `Schools` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `School` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

는 다음과 같이 데이터베이스에 연결 : 그것은의 모양은

echo json_encode($row, JSON_UNESCAPED_UNICODE); 

이 트릭을 할해야합니다.

이 내가 위에 제공된 테이블에 PHP7.1에 근무

UPDATE :

if (isset($_GET['term'])) { 
    $return_arr = array(); 

    try { 
     $conn = new PDO("mysql:host=127.0.0.1;port=8101;dbname=test;charset=utf8", $user, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $conn->prepare('SELECT School FROM Schools WHERE School LIKE :term'); 
     $stmt->execute(array('term' => '%'.$_GET['term'].'%')); 

     $return_arr = []; 
     while($row = $stmt->fetch()) { 
      $return_arr[] = $row['School']; 
     } 

    } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
    } 


    /* Toss back results as json encoded array. */ 

    echo json_encode($return_arr, JSON_UNESCAPED_UNICODE); 

} 
+0

데이터베이스가 아닙니다. 나는 json없이 변수를 echo하기 위해 test.php를 작성하여 테스트했다. JSON이 없으면 올바르게 표시됩니다. –

+0

@CharlesTester 데이터베이스에 연결할 때 charset을 설정해야합니다. charset을 사용하지 않으면 작동하지 않습니다. 내 업데이트 답변을 참조하십시오. – zstate

0

1) json_encodeJSON_UNESCAPED_UNICODE을 사용합니다.

2) 데이터 저장, 데이터 액세스 이 UTF-8 문자 집합 (UTF-8 all the way through)으로 출력되고 입력되는지 확인하십시오.

+0

이 데이터베이스가 아닌 것을 알려줍니다. 나는 json없이 변수를 echo하기 위해 test.php를 작성하여 테스트했다. JSON이 없으면 올바르게 표시됩니다. –

관련 문제