2014-03-18 2 views
1

저는 CodeIgniter의 json 응답에서 scaped 문자를 PhilSturgeon REST Server으로 제거하려고 애 쓰고 있습니다.CodeIgniter and RESTful : 반환 된 json에서 백 슬래시를 제거하는 방법?

모든 것이 정상적으로 작동하지만 문제는 응답과 함께 제공됩니다. json 형식으로 데이터를 가져 오기 위해 URL에 액세스 할 때 얻을 수 있지만 이스케이프 처리 된 문자를 사용하면 문제가 발생합니다.

예 :

http://localhost/revista_servidor/index.php/api/notas/nota/id/1 

나에게 다음 응답을 제공합니다 :

[{ "ID": "1", "autor": "Prueba autor", "titulo": "Comprobaci ","subtitulo ":"하위 \ u00edtulo. ","foto1 ":"http : //link.a.foto/foto1 ","texto1 ":"Comprobaci \ u00f3n de t \ u00ed \ u00edtulo " \ r \ n ","pauta1 ":"1 ","texto2 ":"텍스트 2를 수정하십시오. \ r \ n ","foto2 ":"http : //link.a .foto/foto2 ","pauta2 ":"1 ","texto3 ":"텍스트 3을 압축하십시오. ","foto3 ":"http : //link.a.foto/foto3 ","pauta3 ": "1", "texto4": "텍스트와 일치 \ 4. ","texto5 ":"텍스트 5로 압축 ","texto6 ":"텍스트 6으로 압축 ","datosweb ":"http : //link.a.pagina.de.datos/","아델란 토 ":"Comprobaci \ u00f3n 델 texto 드 년 Adelante ","nrorevista ":"69 "}]

이 (이 예에서는 ó)를 특별 문자 백 슬래시 \ 추가 및 변경 URL을 탈출과 : \u00f3.

stripslashes()을 추가하려고했지만 작동하지 않았습니다. 개발자 도구에서 응답을 확인했으며 예상대로 제공됩니다. 콘텐츠 형식 : application/json.

어떻게 인코딩 문제를 해결할 수 있습니까? 또한 구성 파일을 점검 했으므로이 문제를 해결할 수있는 방법이 없습니다.

컨트롤러 : /application/controllers/api/notas.php

function nota_get() { 
    // ID verification. 
    if (!$this->get('id')) { 
     // NO ID. 
     $this->response(NULL, 400); 
    } 

    $nota = $this->Notas_model->get($this->get('id')); 

    if ($nota) { 
      stripcslashes($this->response($nota, 200)); 
    } 

    else { 
     $this->response(NULL, 404); 
    } 
} 

모델 : /응용 프로그램

내가 아래에있는 내 코드입니다, 누군가가 올바른 방향으로 날 지점 수 있기를 바랍니다 /models/notas_model.php

function get($id = 0) { 
    $this->load->database(); 
    if ($id) { 
     $query = $this->db->get_where('notas', array('id' => $id)); 
    } 

    else { 
     $query = $this->db->get('notas'); 
    } 
    return $query->result(); 
} 

이 문제지만,이 데이터가 교류 될 경우 나도 몰라 클라이언트 측에서 javascript를 통해 중단되었습니다.

미리 감사드립니다.

답변

2

JSON 작동 방식과 마찬가지로 json_decode 기능을 사용해보십시오. 예 :

$json = json_decode($json_string); 
$json->autor; 
+1

자네 말이 맞아 나는')이 자바 스크립트를 통해 액세스 할 것이다, 그래서 jQuery를'$ 갔지를 (사용 전에 말했듯 이스케이프 문자가없는 콘솔에서 결과를 보았습니다. 고마워요 @ 보닉! – Ariel

+0

이스케이프 된 URL에 JSON.parse()를 사용하면 백 슬래시가 제거되므로 PHP 코드에서 아무 것도 변경할 필요가 없습니다. 이것을보십시오 :'JSON.stringify (JSON.parse ('{ "path": "디렉토리 \/서브 디렉토리 \/filename.ext"}'))'. 이스케이프 처리 된 백 슬래시가없는 경로를 다시 얻을 수 있습니다. 그래서 JS를 사용하여 RESTful codeigniter 코드의 주어진 데이터를 문제없이 사용할 수 있습니다 :) – Narxx

-1

1) 당신은 json_decode()를 사용해야하고 대신 위해서 stripslashes()

2) URLDECODE (모두)와 위해서 stripslashes의 URLDECODE는(),()는 같은 문자열을 PHP 버전에 의존하는 무언가에 "자동 축소"되는 객체를 제공하려고 시도하는 동안 그것이 무엇이든, 아마도 당신이 기대하는 바가 아닙니다.코드에서

:

if ($nota) { 
     stripcslashes($this->response($nota, 200)); 
} 

당신이 필요) 동일하거나 다른 변수에 디코딩의 결과를 저장할 수 있습니다, b)는 개체의 ($의 Nota을 통해 루프에) 각각의 값을 언 이스케이프 키 - 값 쌍

이 당신이 달성하기 위해 무엇을 찾고, 희망

... 
$cleanObject = array(); 

if ($nota) { 

    $decodedObject = json_decode($this->response($nota, 200)); 

    foreach ($decodedObject as $key => $value) { 

     $cleanObject[$key] = urldecode($value); 

    } 
} 

echo "<pre>"; 
print_r($cleanedObject); 
echo "</pre>"; 

// output 
/* 
Array 
(
[id] => 1 
[autor] => Prueba autor 
[titulo] => Comprobación de tíítulo. 
[subtitulo] => Comprobación de subtítulo. 
[foto1] => http://link.a.foto/foto1 
[texto1] => Comprobación de texto 1. 

[pauta1] => 1 
[texto2] => Comprobación de texto 2. 

[foto2] => http://link.a.foto/foto2 
[pauta2] => 1 
[texto3] => Comprobación de texto 3. 
[foto3] => http://link.a.foto/foto3 
[pauta3] => 1 
[texto4] => Comprobación de texto 4. 
[texto5] => Comprobación de texto 5. 
[texto6] => Comprobación de texto 6. 
[datosweb] => http://link.a.pagina.de.datos/ 
[adelanto] => Comprobación del texto de adelante 
[nrorevista] => 69 
) 
*/ 


... 

을보십시오.

필요에 따라 결과를 다시 인코딩해야 할 수 있습니다. 당신이 언급 자바 스크립트를 기반으로, 당신은 JSON 결과를 다시 변환해야 할 수 있습니다

$unescapedAndJSONencodedObject = json_encode($cleanObject); 
+0

답장을 보내 주셔서 감사합니다. @niennte,하지만 PHP 코드를 수정하지 않고 해결되었습니다. (잘 수정되었으므로'stripcslashes ()'그것은 아무것도하지 않았기 때문에). @ 보닉이 말했듯이, json은 그런 식으로 작동하며 브라우저에 데이터가 표시되면 이스케이프 된 문자가 있어야하는 것처럼 표시됩니다. – Ariel

+0

PHP 코드에는 아무런 문제가 없습니다. 내가 받아 들인 대답의 주석에 설명했듯이 JS는 그 값을 아무 문제없이 읽을 것입니다. PHP 코드를 변경하는 것은 Codeigniter와 일치하지 않으며, 합당한 이유없이 패치 작업을하는 것이 아니라 작업을 혼자 두는 것이 좋습니다. – Narxx

관련 문제