Intereting Posts
Переписать URL-адрес для результатов пользовательского WP_Query Исключить публикацию по электронной почте с помощью pre_get_posts Как создать пользовательский тип сообщения для учебной CMS в WordPress? как изменить размер поля <textarea> в метабоке: высота ROWS и контроль прокрутки? Исключить таблицу стилей из admin Могу ли я получить доступ к сообщениям настраиваемых полей через URL? Pagination не работает должным образом для архива настраиваемого типа сообщений, указанного на первой странице Неиерархическая пользовательская таксономия с использованием флажков на экране редактирования -> проблема с сохранением Как отобразить заголовок прикрепленного изображения в сообщении? Как переопределить функцию плагина, завернутую в класс? Post.php – Условные заявления для новой публикации и редактирования сообщения get_category_link возвращающий URL страницы Крючки для контента vs Пользовательские крючки Пользовательские вложенные комментарии в WordPress с аватаром Расширить страницу таксономии с другими сообщениями

Нужно ли проверять `content-type` в заголовках?

Был более старый вопрос, на который я отвечаю, где кто-то хочет удалить протоколы HTTP и HTTPS из URL-адресов на своем веб-сайте :

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

В результате он дает следующее:

 <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" /> 

Однако я упростил remove_protocols() которая дает мне те же результаты:

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

В моей исходной функции необходимо проверить content-type в заголовках? Проведя некоторые исследования, я нашел аналогичный вопрос о переполнении стека, который зависит от ситуации. Из этого я предполагаю, что было бы безопасно использовать мою упрощенную версию вместо этого, но я хотел бы получить подтверждение, если я правильно понимаю это.

В контексте этого вопроса, да, это так. Не проверяя заголовок типа содержимого, вы не знаете, является ли то, что обслуживается, это html-страница или изображение, и, хотя маловероятно, что регулярное выражение будет соответствовать чему-либо на изображении, существует риск.

другим способом написать этот код, чтобы get_header его с template_redirect или даже get_header как можно ближе к 100%, вы имеете дело с html-страницами, а не с RSS, json, xml и т. д., для которых это преобразование URL-адресов может не потребоваться или даже Добро пожаловать.

снова посмотрев на исходный вопрос, очевидно, вы тоже захотите его на страницах администратора … так что, возможно, ваше оригинальное решение является самым полным, что может быть на самом деле.

OTOH, и не очень связанный с этим вопросом, вы можете закончить замену слишком много, как канонический url, который может создать проблему с дублирующимся содержимым.