2012-01-12 2 views
2

I로 json_encode /사용자/crazy_bash/온라인/테스트 경로가 포함 된 변수/PHP :로 json_encode 변화 슬래시 합니다/

하지만로 json_encode이 경로로 변환이 :

\/users\/crazy_bash\/online\/test\/ 

을 왜? 어떻게 정상적인 경로를 표시 할 수 있습니까?

코드

당신은 사용하기 전에 디코딩해야합니다
$pl2 = json_encode(array(
    'comment' => $nmp3, 
    'file' => $pmp3 
)); 
echo($pl2); 
+1

글쎄, 그건'json_encode()'가해야 할 일입니다. json 문자열을 디코딩하면 다시 올바를 것입니다. 그렇습니까? – TRiG

+0

json_decode를 사용해 보셨습니까? – Elen

답변

8

완벽하게 합법적 JSON은 http://json.org/를 참조 그것입니다. 문자열을 직렬화 해제 할 때 \//으로 변환됩니다. 출력이 적절한 JSON 구문 분석기에 의해 직렬화되지 않으면 왜 걱정하지?

당신이 당신의 출력 \/을 가지고 주장하는 경우에, 당신은 사용할 수 있습니다 str_replace() :

JSON string http://json.org/string.gif

+0

사진에서 정방향 및 역 슬래시가 유효한 JSON으로 이스케이프 처리해야한다는 것을 보여주는 그림이 아닙니까? –

+0

물론 ... 문제가 무엇입니까? – Vultour

+1

@Rocket no,'\ or'또는 \ 또는 제어 문자 '를 제외한 모든 유니 코드 문자가 허용됩니다 (포워드와 백 슬래시를 포함합니다) 또한'\ /'도 인식되어'/'가됩니다. '\ u002F'를 포함하여 슬래시를 지정하는 여러 가지 방법이 있습니다. – Lekensteyn

1

.

json_decode()

3

이스케이프 상선 : 그것은 유효한 JSON 문자열의 정의에 의해 여전히 것을

// $data contains: {"url":"http:\/\/example.com\/"} 
$data = str_replace("\\/", "/", $data); 
echo $data; // {"url":"http://example.com/"} 

주 합법적입니다. 그러나 탈출하지 않고 결과를 원하면 json_encode 옵션에 JSON_UNESCAPED_SLASHES을 사용하십시오. 그러나 이것은 PHP 5.4 이후에 추가되었습니다. 따라서 str_replace('\\/', '/', $pl2);이 도움이됩니다.

+0

한번 구문 분석하거나 해독하면 문자열이 올바른 이유는 없습니다 –

+0

그래, 나도 알아.하지만 탈출하지 않은 단서도 합법적이다. 그리고 '깨끗한 (매우 주관적인)'또는 '인간화 된'결과는 누군가에게 도움이 될 것이다. 나는이 게시물에 동의한다 : http://noteslog.com/post/the -solidus-issue / – lqez

0

그건 바로 json_encode입니다. json_decode 또는 JSON.parse가 되었으면 문제가 없습니다.

var f = {"a":"\/users\/crazy_bash\/online\/test\/"} 
console.log(f.a); // "https://stackoverflow.com/users/crazy_bash/online/test/" 

var h = JSON.parse('{"a":"\/users\/crazy_bash\/online\/test\/"}'); 
console.log(h.a); // "https://stackoverflow.com/users/crazy_bash/online/test/" 
0

나는 기본적으로 데이터를 디코딩 한 다음 엔코 드해야하므로 막대가 없으면 올바르게 작동하므로 코드를 확인하십시오.

$getData = json_decode($getTable);     
$json = json_encode($getData); 

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