2010-04-17 4 views
2

음, 주제는 모든 것을 말합니다. json_encode를 사용하여 일부 UTF8 데이터를 JSON으로 변환하고 현재 ASCII 전용 인 일부 레이어로 전송해야합니다. 그래서 내가 UTF-8인지를 알아야 할 필요가 있는지, 아니면 그대로 두어도 될까요?PHP의 json_encode가 ASCII 문자열 생성을 보장합니까?

JSON rfc를 보면 UTF8도 JSON 출력에서 ​​유효한 문자 세트입니다 (권장되지는 않지만). 즉, 일부 구현시 UTF8 데이터를 내부에 남겨 둘 수 있습니다. 질문은 PHP의 구현이 ASCII로만 적용되는지 여부 또는 UTF-8로 무언가를 남기기로 선택하는지 여부입니다.

답변

6

other languages의 JSON 지원과 달리 json_encode()은 ASCII보다 기타을 생성 할 수 없습니다.

+0

감사합니다 이그나시오, 이것은 내가 찾는 대답의 종류입니다. 이 문제를 뒷받침 할 수있는 웹 사이트 또는 다른 참조 자료를 제공해 줄 수 있습니까? –

+0

나는 할 수 없다. 내가 할 수있는 일은'json_encode()'에 인수 나 옵션이 없기 때문에 다른 것을 생성하는 것이다. –

+0

나는 그것이 충분하다고 생각한다. –

0

음, json_encode은 문자열을 반환합니다. PHP documentation for string에 따르면 :

문자열은 일련의 문자입니다. PHP 6 이전에는 문자가 바이트와 같습니다. 즉, 정확하게 256 개의 다른 문자가 가능합니다. 이것은 또한 PHP가 유니 코드를 기본적으로 지원하지 않는다는 것을 의미합니다. 일부 기본 유니 코드 기능에 대해서는 utf8_encode() 및 utf8_decode()를 참조하십시오.

당분간 UTF-8 인식에 대해 걱정할 필요가 없습니다. 물론 미래의 코드를 증명할 수있는 방법을 생각해 볼 수도 있습니다.

+4

그리고 PHP 6를 사용하고 계신다면 언제든 환영합니다! – salathe

+1

@salathe : "다시 SVN에서 돌아온다"는 의미라고 생각합니다. –

+0

PHP가 반대편에 있지 않기 때문에 utf8_encode와 _decode를 사용할 수 없습니다. 필자는 PHP에서 JSON으로 데이터를 덤프하고, ASCII 만 이해하는 레이어를 통과시키고, 목적지의 JavaScript를 통해이를 사용할 필요가 있습니다. JavaScript가 PHP와 동일한 utf8 기능을 가지고 있지 않으면 사용이 불가능합니다. –

3

Wikipedia에서 JSON의 기사에 따르면, 문자열에서 유니 코드 문자는

두 번 인용 백 슬래시

탈출 유니 코드 json_encode()에 PHP 매뉴얼의 예제는이를 확인하는 것 항상.

그래서 ASCII/ANSI 외부의 어떤 UTF-8 문자는 다음과 같이 탈출해야합니다 \u0027 (참고, @Ignacio는 의견에서 지적 하듯이이 그 문자가 아닌 다루는 방법을 추천입니다 필요한 하나)

그러나 나는 json_decode() 문자를 자신의 바이트 값으로 다시 변환한다고 가정합니까? 거기에 곤경에 처할 수도 있습니다.

확실한 경우, UTF-8 String을 ASCII로 변환 할 수있는 (지원되지 않는 문자는 제외) 사전에 을 살펴보십시오.

+0

지원되지 않는 문자를 삭제하고 싶지 않습니다. 나는 그들을 보존해야한다. –

+0

@ 밀란 그러면 '\ u0027'형식으로 변환 된 상태로 유지되어야합니다. 잠깐만, 내가 그걸 어떻게 할 수 있는지 알아 보겠다. –

+1

RFC 4627, 3 절, "인코딩": "JSON 텍스트는 유니 코드로 인코딩되어야하며, 기본 인코딩은 UTF-8입니다." 유니 코드가 이스케이프 (escape) 할 수 있다고해서 반드시 * 필수 *라는 의미는 아닙니다. –

관련 문제