PHP 및 HTTP 헤더 라인 브레이크 : 어떤 캐릭터를 나타내는 데 사용 되었습니까?

StackOverflow https://stackoverflow.com/questions/771077

  •  12-09-2019
  •  | 
  •  

문제

나는 일련의 컬 리턴 HTTP 헤더의 각 라인을 통해 반복되어 한 번이 끝나고 다음이 시작될 때를 감지하려고 노력하고 있습니다. HTTP 헤더가 빈 줄로 끝나는 것을 알고 있지만 PHP 에서이 라인 브레이크를 나타내는 데 어떤 문자가 사용됩니까? 나는 함께 시도했다 \n 그러나 그것은 작동하지 않는 것 같습니다. 나는 확실히 뭔가 잘못을 할 수있었습니다.

헤더를 종료하는 데 사용되는 라인 브레이크를 나타내는 데 어떤 문자가 사용됩니까?

내 기존 코드는 다음과 같습니다.

$redirect = '';
$regs = '';
foreach ($curl_response as $line)
{   
    if ($line != "\n")
    {   # line is not a linebreak, so we're still processing a header block

        if (preg_match("(HTTP/[0-9]\.[0-9] [0-9]{3} .*)",$line))
        {   # line is the status code
            # highlight the outputted line
            $output .= "<b style='background: yellow;'>$line</b>";
        }

        elseif (preg_match("/^Location: (.*)$/m",$line,$regs)) 
        {   # the line is a location header, so grab the location being redirected to
            # highlight the outputted line
            $output .= "<b style='background: purple; color: white;'>$line</b>";
            $redirect = $regs[1];
        }

        else 
        {   # some other header, record to output
            $output .= $line;
        }

    }

    else 
    {   # we've reached a line break, so we're getting to a new block of redirects
        $output .= "\nreached line break\n";
        if ($redirect != '')
        {   # if we recorded a redirect above, append it to output
            $output .= "\n\nRedirecting to $redirect\n\n";
            $redirect = '';
        }

    }   

}

echo $output;

해결되었습니다 - 그거 나타났습니다 \r 내가 어울리는 것입니다. 매우 이상합니다. 이 사이트마다 변경되는지 또는 컬에 설정된 지 확실하지 않습니다. 지금까지 \r 내가 시도한 모든 사이트에서.

편집 2: doh. 헤더를 라인 배열로 데려 가기 위해 폭발했기 때문이라고 생각합니다. \n. 아마 \r\n 지금은 그냥입니다 \r...

$c = explode("\n",$content);
도움이 되었습니까?

해결책

" r n"및 " r"도 확인해야합니다. 이는 빈 줄이 유효하기 때문에 유효합니다.

표준 형태 일 때, "텍스트"유형의 미디어 하위 유형은 CRLF를 텍스트 줄 브레이크로 사용합니다. HTTP는이 요구 사항을 완화하고 전체 엔티티 바디에 대해 일관되게 수행 될 때 라인 브레이크를 나타내는 일반 CR 또는 LF 단독으로 텍스트 미디어를 전송할 수 있습니다. HTTP 애플리케이션은 HTTP를 통해 수신 된 텍스트 매체의 라인 브레이크를 대표하는 CRLF, Bare CR 및 Bare LF를 수락해야합니다.

-- HTTP/1.1 : 프로토콜 매개 변수 -3.7.1 표준화 및 텍스트 기본값

다른 팁

헤더는 공간이없는 이중 선 파단으로 종료됩니다 (즉, 빈 줄). 라인 브레이크는 " n", " r n"또는 " r"일 수 있습니다. 후자는 드문 일이지만 여전히 설명해야합니다.

아마도 당신은 정규 표현식으로 헤더의 끝을 찾을 수 있습니다.

list($headers) = preg_split('/(\r\n?|\n)(\r\n?|\n)/', $httpresponse);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top