2017-11-28 63 views
0

나는 내가 사용 위에서 \ n 문자를 제거하려고PHP - JSON 응답에서 n을 제거

{"status":true,"action_values":"{\n \"range_from\": \"0\",\n \"range_to\": \"0\"\n}"} 

아래처럼 보이는 API 호출에서 (간체) JSON 응답이 PHP하지만 작동하지 않는 것 같습니다.

나는 시도 : $ 응답 위와 같이 내 JSON 문자열입니다

$trimmed = str_replace("\n", "", $response); 

. 그러나 이것으로는 제거/대체하지 않습니다. \ n 문자.

+4

'않는 str_replace (-String 변수가 문자열에 삽입 할 수 있도록로 지금까지 간다" \ n ", ...'나를 위해 작동 –

+0

'action_values'는 json 자체 인 것 같습니다. –

+0

str_replace ("\\ n", ... 나를 위해 속임수를 써주었습니다. 감사합니다 .B001. 답변으로 표시하면 동의 함으로 표시합니다. – heyred

답변

1

JSON을 처리하기 위해 PHP 네이티브 함수를 사용하므로 @jeroen의 솔루션을 권하고 싶습니다.

그러나 물어 본 결과, 솔루션이 작동하지 않는 이유를 완전히 이해하지 못한다는 것을 알고 있습니다.

$trimmed = str_replace("\\n", "", $response); 

그 이유는 "\ n을"새로운 라인 문자를 나타내는, 때 "

으로 이미"\\ n "은이 작업에 필요한 @의 B001로 의견에서 지적 \\ n "은 문자열"\ n "을 나타냅니다.

다음 코드를 시도하고 다음과 같은 결과가 유도 차이

print("-----"); 
print("\n"); 
print("-----"); 
print("\\n"); 
print("-----"); 
print("\""); 

표시됩니다

----- 
-----\n-----" 

그 이유는 그 "\"문자의 모든 인스턴스 코드에서 제어 문자를 시작합니다. 이것에 대한 예는 개행을위한 "\ n", 캐리지 리턴을위한 "\ r", 탭을위한 "\ t", ""에 의해 정의 된 문자열 안의 -character에 대한 ""및 실제 백 슬래시에 대한 "\\" 캐릭터.

따라서 실제 문자열에 \ n이 포함되도록하려면 인터프리터에게 \로 구분 된 제어 문자가 아니라 \ 문자가 실제로 필요하다는 것을 사용자에게 알려줘야합니다. 이것은 실제 백 슬래시 문자열의 문자열 표현 인 이중 백 슬래시 "\\"를 사용하여 수행됩니다. 이것을 "탈출"이라고합니다.

귀하의 경우 $ response 변수에 실제 문자열이 있으므로 이스케이프 된 문자를 패턴으로 사용해야합니다.

마지막으로 "\ n"과 "\ n"의 차이점을 설명합니다. 문자열을 만들 수있는 PHP 두 가지 방법이 있습니다 :

$str1 = "hello \n world\n"; 
$str2 = 'hello \n world\n'; 
print($str1); 
print($str2); 

두 변수 문자열을 포함은 그러나 "-String가 포함 된 문자열을 해석해야한다는 PHP 인터프리터에 대한 나타내는 '-String 동안 그것이 당신에게 문자열을 제공 위의 예는 다음과 같은 출력에서 ​​이에 대한 결과는 다음과 같습니다.

hello 
world 
hello \n world\n 

이 다음 코드는 '\ n을'이후 \ n 인스턴스 당신의 문자열을 제거 것이라는 점을 보여줍니다 포함됩니다 제어 문자가 아닌 실제 문자열 :

\
$trimmed = str_replace('\n', "", $response); 

의 이러한 해석 ":

$name = "Daniel"; 
$age = 18; 
$sentence = "My Friend $name is $age years old."; 
print($sentence); 

및 초래

My Friend Daniel is 18 years old. 
7

\n/개행을 제거 할 필요가 없습니다.

대신 당신은 json_decode()를 사용하여 문자열을 디코딩해야하고 당신은 또한 JSON 원래 JSON 내부 인코딩 된 range_from 값을 디코딩 할 수 있습니다

<?php 
$str = '{"status":true,"action_values":"{\n \"range_from\": \"0\",\n \"range_to\": \"0\"\n}"}'; 

$dec = json_decode($str, true); 

var_dump(json_decode($dec['action_values'], true)); 

결과 :

array(2) { 
    ["range_from"]=> 
    string(1) "0" 
    ["range_to"]=> 
    string(1) "0" 
} 

An example합니다.