wake-up-neo.net

Ist es notwendig, in den Headern nach dem Inhaltstyp zu suchen?

Es gab eine ältere Frage, die ich beantworte, als jemand die HTTP- und HTTPS-Protokolle von den URLs auf seiner Website entfernen wollte :

add_action( 'plugins_loaded', 'output_buffering' );

function output_buffering() {
    ob_start( 'remove_protocols' ) );
}

function remove_protocols( $buffer ) {
    $content_type = NULL;
    foreach ( headers_list() as $header ) {
        if (strpos( strtolower( $header ), 'content-type:' ) === 0 ) {
            $pieces = explode( ':', strtolower( $header ) );
            $content_type = trim( $pieces[1] );
            break;
        }
    }
    if ( is_null( $content_type ) || substr( $content_type, 0, 9 ) === 'text/html' ) {
        $return = preg_replace( '~=\s*["\']\s*https?:(.*?)["\']~i', '="$1"', $buffer );
        if ( $return ) {
            $buffer = $return;
        }
    }
    return $buffer;
}

Als Ergebnis gibt es Folgendes:

<link rel='stylesheet' id='some-id'  href='//example.com/some/style.css' type='text/css' media='all' />
<script type='text/javascript' src='//example.com/some/script.js'></script>
<a href="//example.com" title="Some Title" rel="home">Some Link</a>
<img src="//example.com/some/image.jpg" alt="Some Alt" width="150" height="50" />

Ich habe jedoch die Funktion remove_protocols() vereinfacht, wodurch ich die gleichen Ergebnisse erhalte:

function remove_protocols( $buffer ) {
    $buffer = preg_replace( '~=\s*["\']\s*https?:(.*?)["\']~i', '="$1"', $buffer );
    return $buffer;
}

Muss ich in meiner ursprünglichen Funktion in den Headern nach content-type suchen? Bei Recherchen habe ich eine ähnliche Frage zum Stack Overflow gefunden, die situationsabhängig ist. Nach dem Lesen gehe ich davon aus, dass es sicher ist, stattdessen meine vereinfachte Version zu verwenden, aber ich möchte eine Bestätigung erhalten, wenn ich dies richtig verstehe.

Im Zusammenhang mit dieser Frage ist es ja. Ohne den Inhaltstyp-Header zu überprüfen, wissen Sie nicht, ob es sich bei dem bereitgestellten Inhalt um eine HTML-Seite oder ein Bild handelt. Auch wenn es unwahrscheinlich ist, dass der reguläre Ausdruck mit einem Bild übereinstimmt, besteht das Risiko.

eine andere Möglichkeit, diesen Code zu schreiben, besteht darin, ihn mit template_redirect oder sogar get_header zu verknüpfen, um zu 100% sicher zu sein, dass Sie es mit HTML-Seiten und nicht mit RSS, JSON, XML usw. zu tun haben, für die diese URL-Umwandlung möglicherweise nicht erforderlich ist herzlich willkommen.

wenn Sie sich die ursprüngliche Frage noch einmal ansehen, werden Sie sie natürlich auch auf den Administrationsseiten sehen wollen. Vielleicht ist Ihre ursprüngliche Lösung also die umfassendste, die es überhaupt geben kann.

OTOH, und nicht sehr verwandt mit dieser Frage, könnten Sie damit enden, zu viel zu ersetzen, wie die kanonische URL, die zu Problemen mit doppelten Inhalten führen könnte.

1
Mark Kaplun