PHP에서 문자열 배열 안에 백슬래시(\)를 추가해야 하는 경우가 종종 있습니다. 예를 들어 JSON 데이터를 다시 한 번 인코딩하거나, 이스케이프 처리된 문자열이 필요할 때가 그렇습니다. 이럴 때 가장 간단하고 확실한 방법은 json_encode() 함수를 활용하는 것입니다.
기본 개념
json_encode()는 PHP 값을 JSON 형식의 문자열로 변환하는 함수입니다. 이 과정에서 문자열은 큰따옴표로 감싸지고, 내부의 특수문자는 자동으로 이스케이프 처리됩니다. 만약 이미 JSON으로 변환된 문자열을 한 번 더 json_encode()로 감싸면, 전체 문자열이 하나의 값으로 취급되면서 내부의 모든 큰따옴표 앞에 백슬래시가 붙게 됩니다.
예제: 변환 전 배열
다음과 같은 배열이 있다고 가정해 보겠습니다.
$value = [
"ADD", "REMOVE", "SELECT", "MODIFY"
];우리가 원하는 최종 결과는 배열의 각 요소와 대괄호가 백슬래시로 이스케이프 처리된 아래와 같은 문자열입니다.
"[\"ADD\",\"REMOVE\",\"SELECT\",\"MODIFY\"]"
전체 코드 예제
json_encode()를 두 번 중첩해서 호출하면 원하는 결과를 얻을 수 있습니다. 전체 코드는 다음과 같습니다.
<!DOCTYPE html>
<html>
<body>
<?php
$value = [
"ADD", "REMOVE", "SELECT", "MODIFY"
];
echo json_encode(json_encode($value)) . "\n";
?>
</body>
</html>실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
"[\"ADD\",\"REMOVE\",\"SELECT\",\"MODIFY\"]"
동작 원리 정리
코드의 동작 순서를 단계별로 살펴보면 다음과 같습니다.
1. 첫 번째 json_encode($value) 호출 시 배열이 JSON 문자열로 변환됩니다. → ["ADD","REMOVE","SELECT","MODIFY"]
2. 두 번째 json_encode() 호출 시 이 문자열 전체가 하나의 JSON 문자열 값으로 감싸지고, 내부의 큰따옴표 앞에 자동으로 백슬래시가 추가됩니다.
3. 최종적으로 이스케이프 처리된 문자열이 화면에 출력됩니다.
이처럼 json_encode()를 이중으로 사용하면 별도의 문자열 치환 작업 없이도 안전하게 백슬래시가 포함된 문자열을 생성할 수 있습니다. API 응답 데이터를 중첩 구조로 전달하거나, JSON 문자열 자체를 데이터로 저장해야 하는 상황에서 유용하게 활용할 수 있습니다.