티스토리 뷰

반응형

`echo(json_encode($data, JSON_UNESCAPED_UNICODE));`와 `echo json_encode($data);`의 차이점은 `json_encode` 함수에 제공되는 옵션에 있습니다.

1. **`echo(json_encode($data, JSON_UNESCAPED_UNICODE));`**: 이 코드는 `json_encode`를 호출할 때 `JSON_UNESCAPED_UNICODE` 옵션을 지정합니다. 이 옵션은 유니코드 문자가 `\uXXXX`와 같이 이스케이프되지 않도록 합니다. 이 옵션은 데이터에 한국어와 같은 비 ASCII 문자가 포함되어 있을 때 유용합니다. 이 옵션을 사용하면 JSON 출력에 실제 유니코드 문자가 포함되어 가독성이 향상됩니다.

2. **`echo json_encode($data);`**: 이 코드는 추가 옵션이 지정되지 않으므로 `json_encode`의 기본 동작이 사용됩니다. 기본 동작에서는 비 ASCII 문자가 `\uXXXX`와 같이 유니코드 시퀀스로 이스케이프됩니다. 이렇게 함으로써 JSON이 유효하게 유지되며 올바르게 인코딩되지만, 특히 비 ASCII 문자를 다룰 때 JSON이 인간이 읽기에 어려울 수 있습니다.

귀하의 경우, 방문자 이름 ("김보곤")과 같이 한국어 문자를 사용하므로 `echo(json_encode($data, JSON_UNESCAPED_UNICODE));`를 사용하는 것이 좋습니다. 이렇게 하면 JSON 응답에 한국어 문자가 그대로 포함되어 가독성이 높아지며 여전히 유효한 JSON이 됩니다.

따라서 비 ASCII 문자의 가독성을 유지하려면 `json_encode` 호출 시 `JSON_UNESCAPED_UNICODE` 옵션을 사용해야 합니다.

실제 사용예입니다.

<?php
// read_visitors.php

session_start(); 

$user_name= $_SESSION["name"];
$user_id= $_SESSION["userid"];

require_once($_SERVER["DOCUMENT_ROOT"] . "/lib/mydb.php");
$pdo = db_connect();

$waitlist = array();

try {
    $sql = "SELECT * FROM [여러분의 DB 테이블]  WHERE TIMESTAMPDIFF(MINUTE, visit_time, NOW()) <= 5";
    $stmh = $pdo->prepare($sql);
    $stmh->execute();

    while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) {
        $waitlist[] = $row["visit_name"];
    }
} catch (PDOException $Exception) {
    echo json_encode(array("error" => "오류: " . $Exception->getMessage()));
    exit;
}

header('Content-Type: application/json');

$waitlist = array_unique($waitlist);

$data = [
            'waitlist' => $waitlist
        ];

echo(json_encode($data, JSON_UNESCAPED_UNICODE));   // 한국어를 사용할때는 이렇게 선언해야 한다. echo json_encode($data);의 차이점은 json_encode 함수에 제공되는 옵션에 있습니다.
?>

반응형
댓글