Pregunta

Estoy bucle a través de cada línea de una serie de RIZO volvieron cabeceras http, tratando de detectar cuando uno termina y comienza el siguiente. Sé que una cabecera HTTP termina con una línea vacía, pero qué carácter se utiliza para representar el salto de línea en php? He tratado con \n pero no parece funcionar. Desde luego, podría estar haciendo algo mal.

¿Con qué personaje se utiliza para representar el salto de línea utilizado para terminar una cabecera?

Aquí está mi código existente:

$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;

Resuelto - Resulta que \r es lo que debería haber sido devueltos localizados en el. Muy raro. No estoy seguro si esto cambia por sitio, o si es algo establecido en rizo. Hasta ahora su \r en todos los sitios que he probado.

Editar 2 : Doh. Creo que es porque a fin de obtener la cabecera en una serie de líneas, exploté en \n. Así que quizás cualquier \r\n son ahora sólo \r ...

$c = explode("\n",$content);
¿Fue útil?

Solución

Es necesario también para comprobar "\ r \ n" y "\ r", como las que también son válidos terminación de líneas vacías.

  

Cuando está en forma canónica, los subtipos de medios de la "texto" tipo de uso CRLF como el salto de línea de texto. HTTP relaja este requisito y permite el transporte de los medios de comunicación de texto con CR liso o LF sola representa un salto de línea cuando se hace constantemente por toda una entidad-cuerpo. aplicaciones HTTP deben aceptar CRLF, CR desnudo, y LF desnudo como representativa de un salto de línea en los medios de comunicación de texto recibido a través de HTTP.

HTTP / 1.1: Parámetros de protocolo - 3.7. 1 canonicalización y texto predeterminados

Otros consejos

Las cabeceras terminan con un salto de línea doble con ningún espacio en el medio (es decir, una línea de vacío). Un salto de línea puede ser "\ n", "\ r \ n" o simplemente "\ r". A pesar de que este último es raro que todavía tiene que tenerse en cuenta.

Tal vez usted podría encontrar el final de las cabeceras con una expresión regular como

list($headers) = preg_split('/(\r\n?|\n)(\r\n?|\n)/', $httpresponse);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top