Php разрешить короткие теги. WordPress: Использование регулярного выражения для получения картинок из записи

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

strip_tags

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

strip_tags - Удаляет HTML и PHP тэги из строки

Описание

string strip_tags (string str [, string allowable_tags])

Эта функция возвращает строку str, из которой удалены HTML и PHP тэги. Для удаления тэгов используется автомат, аналогичный примененному в функции fgetss() .

Необязательный второй аргумент может быть использован для указания тэгов, которые не должны удаляться.

Замечание: Аргумент allowable_tags был добавлен в PHP 3.0.13 и PHP 4.0b3. С версии PHP 4.3.0 удаляются также HTML комментарии.

Внимание

Так как strip_tags() не проверяет корректность HTML кода, незавершенные тэги могу привести к удалению текста, не входящего в тэги.

Пример 1. Пример использования strip_tags()
$text = "

Параграф.

Еще немного текста"; echo strip_tags($text); echo "\n\n-------\n"; // не удалять

Echo strip_tags($text, "

"); // Разрешаем ,, echo strip_tags($text, "");

Этот пример выведет:

Параграф. Еще немного текста -------

Параграф.

Еще немного текста

Внимание

Эта функция не изменяет атрибуты тэгов, указанных в аргументе allowable_tags, включая style и onmouseover.

С версии PHP 5.0.0 strip_tags() безопасна для обработки данных в двоичной форме.

У данной функции есть существенный недостаток - это склейка слов при удалении тегов. Кроме этого функция имеет уязвимости. Альтернативная функция аналог strip_tags:

c" * - корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < > * - корректно обрабатывается разбитый html * - вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги, CDATA * - автоматически форматируется текст, если он содержит html код * - защита от подделок типа: "<script>alert("hi") script>" * * @param string $s * @param array $allowable_tags Массив тагов, которые не будут вырезаны * Пример: "b" -- таг останется с атрибутами, "" -- таг останется без атрибутов * @param bool $is_format_spaces Форматировать пробелы и переносы строк? * Вид текста на выходе (plain) максимально приближеется виду текста в браузере на входе. * Другими словами, грамотно преобразует text/html в text/plain. * Текст форматируется только в том случае, если были вырезаны какие-либо таги. * @param array $pair_tags массив имён парных тагов, которые будут удалены вместе с содержимым * см. значения по умолчанию * @param array $para_tags массив имён парных тагов, которые будут восприниматься как параграфы (если $is_format_spaces = true) * см. значения по умолчанию * @return string * * @license http://creativecommons.org/licenses/by-sa/3.0/ * @author Nasibullin Rinat, http://orangetie.ru/ * @charset ANSI * @version 4.0.14 */ function strip_tags_smart(/*string*/ $s, array $allowable_tags = null, /*boolean*/ $is_format_spaces = true, array $pair_tags = array("script", "style", "map", "iframe", "frameset", "object", "applet", "comment", "button", "textarea", "select"), array $para_tags = array("p", "td", "th", "li", "h1", "h2", "h3", "h4", "h5", "h6", "div", "form", "title", "pre")) { //return strip_tags($s); static $_callback_type = false; static $_allowable_tags = array(); static $_para_tags = array(); #regular expression for tag attributes #correct processes dirty and broken HTML in a singlebyte or multibyte UTF-8 charset! static $re_attrs_fast_safe = "(?!) #statement, which follows after a tag #correct attributes (?> [^>"\"]+ | (?<=[\=\x20\r\n\t]|\xc2\xa0) "[^"]*" | (?<=[\=\x20\r\n\t]|\xc2\xa0) \"[^\"]*\")* #incorrect attributes [^>]*+"; if (is_array($s)) { if ($_callback_type === "strip_tags") { $tag = strtolower($s); if ($_allowable_tags) { #tag with attributes if (array_key_exists($tag, $_allowable_tags)) return $s; #tag without attributes if (array_key_exists("<" . $tag . ">", $_allowable_tags)) { if (substr($s, 0, 2) === ""; if (substr($s, -2) === "/>") return "<" . $tag . " />"; return "<" . $tag . ">"; } } if ($tag === "br") return "\r\n"; if ($_para_tags && array_key_exists($tag, $_para_tags)) return "\r\n\r\n"; return ""; } trigger_error("Unknown callback type "" . $_callback_type . ""!", E_USER_ERROR); } if (($pos = strpos($s, "<")) === false || strpos($s, ">", $pos) === false) #speed improve { #tags are not found return $s; } $length = strlen($s); #unpaired tags (opening, closing, !DOCTYPE, MS Word namespace) $re_tags = "~ :*+)?) #1 " . $re_attrs_fast_safe . " > ~sxSX"; $patterns = array("/<([\?\%]) .*? \\1>/sxSX", #встроенный PHP, Perl, ASP код "/<\!\\]>/sxSX", #блоки CDATA #"/<\!\[ [\x20\r\n\t]* .*? \]>/sxSX", #:DEPRECATED: MS Word таги типа ... "/<\!--.*?-->/sSX", #комментарии #MS Word таги типа "...", #условное выполнение кода для IE типа " HTML " #условное выполнение кода для IE типа " HTML " #см. http://www.tigir.com/comments.htm "/ <\! (?:--)?+ \[ (?> [^\]"\"]+ | "[^"]*" | \"[^\"]*\")* \] (?:--)?+ > /sxSX",); if ($pair_tags) { #парные таги вместе с содержимым: foreach ($pair_tags as $k => $v) $pair_tags[$k] = preg_quote($v, "/"); $patterns = "/ <((?i:" . implode("|", $pair_tags) . "))" . $re_attrs_fast_safe . "(? .*? <\/(?i:\\1)" . $re_attrs_fast_safe . "> /sxSX"; } #d($patterns); $i = 0; #защита от зацикливания $max = 99; while ($i < $max) { $s2 = preg_replace($patterns, "", $s); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } if ($i == 0) { $is_html = ($s2 != $s || preg_match($re_tags, $s2)); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } if ($is_html) { if ($is_format_spaces) { /* В библиотеке PCRE для PHP \s - это любой пробельный символ, а именно класс символов [\x09\x0a\x0c\x0d\x20\xa0] или, по другому, [\t\n\f\r \xa0] Если \s используется с модификатором /u, то \s трактуется как [\x09\x0a\x0c\x0d\x20] Браузер не делает различия между пробельными символами, друг за другом подряд идущие символы воспринимаются как один */ #$s2 = str_replace(array("\r", "\n", "\t"), " ", $s2); #$s2 = strtr($s2, "\x09\x0a\x0c\x0d", " "); $s2 = preg_replace("/ [\x09\x0a\x0c\x0d]++ | <((?i:pre|textarea))" . $re_attrs_fast_safe . "(? .+? <\/(?i:\\1)" . $re_attrs_fast_safe . "> \K /sxSX", " ", $s2); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } } #массив тагов, которые не будут вырезаны if ($allowable_tags) $_allowable_tags = array_flip($allowable_tags); #парные таги, которые будут восприниматься как параграфы if ($para_tags) $_para_tags = array_flip($para_tags); } }#if #tags processing if ($is_html) { $_callback_type = "strip_tags"; $s2 = preg_replace_callback($re_tags, __FUNCTION__, $s2); $_callback_type = false; if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } } if ($s === $s2) break; $s = $s2; $i++; }#while if ($i >= $max) $s = strip_tags($s); #too many cycles for replace... if ($is_format_spaces && strlen($s) !== $length) { #remove a duplicate spaces $s = preg_replace("/\x20\x20++/sSX", " ", trim($s)); #remove a spaces before and after new lines $s = str_replace(array("\r\n\x20", "\x20\r\n"), "\r\n", $s); #replace 3 and more new lines to 2 new lines $s = preg_replace("/[\r\n]{3,}+/sSX", "\r\n\r\n", $s); } return $s; } ?>

Смотрите также описание функции

Регулярные выражения – это очень полезный инструмент для разработчиков. С их помощью можно находить, определять или заменять текст, слова или любые другие символы. В сегодняшней статье собраны 15 наиболее полезных регулярных выражений, которые пригодятся любому веб-разработчику.

Введение в регулярные выражения

Многим начинающим разработчикам кажется, что регулярные выражения очень сложны для понимания и использования. На самом деле, все не так уж сложно, как может показаться. Прежде чем мы непосредственно перейдем к регулярным выражениям, с их полезным и универсальным кодом, давайте взглянем на основы:

Синтаксис регулярных выражений

Регулярное выражение Означает
foo Строка “foo”
^foo Строка начинается с “foo”
foo$ Строка заканчивается на “foo”
^foo$ «foo» встречается в строке только один раз
a, b, или c
любой символ в нижнем регистре
[^A-Z] любой символ, не находящийся в верхнем регистре
(gif|jpg) Означает как «gif” так и “jpeg”
+ Один или более символов нижнего регистра
Любая цифра, точка или знак минус
^{1,}$ Любое слово, хотя бы одна буква, число или _
()() wy, wz, xy, или xz
(^A-Za-z0-9) Любой символ (не число и не буква)
({3}|{4}) Означает три буквы или 4 цифры

PHP-функции для регулярных выражений

Функция Описание
preg_match() Функция preg_match() ищет строку по заданному шаблону, возвращает true, если строка находится и false, в остальных случаях
preg_match_all() Функция preg_match_all() находит все вхождения строки, заданной по шаблону
preg_replace() Функция preg_replace(), действует по тому же принципу, что и ereg_replace(), за исключением того, что регулярные выражения можно использовать как для задания шаблона поиска, так и для строки, на которую следует заменить, найденное значение.
preg_split() Функция preg_split(), действует так же как split(), за исключением того, что регулярное выражение можно использовать в качестве параметра для шаблона поиска.
preg_grep() Функция preg_grep() ищет все элементы входного массива, возвращая все элементы, соответствующие шаблону регулярного выражения.
preg_quote() Экранирует символы регулярного выражения

Проверка доменного имени

Проверяем, является ли строка правильным доменным именем

$url = "http://komunitasweb.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $url)) { echo "Your url is ok."; } else { echo "Wrong url."; }

Подсветка слова в тексте

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

$text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor"; $text = preg_replace("/b(regex)b/i", "1", $text); echo $text;

Подсветка результатов поиска в WordPress блоге

Как уже говорилось в предыдущем примере, этот пример кода, удобно использовать в выдаче поисковых результатов и есть отличный способ внедрить эту функцию в wordpress-блог.

Откройте ваш файл search.php, и найдите функцию the_title(). Замените ее следующим кодом:

Echo $title;

Теперь, выше этой строки, добавьте этот код:

\0", $title); ?>

Сохраните файл search.php, и откройте style.css. Добавьте следующую строку:

Strong.search-excerpt { background: yellow; }

Получение всех картинок из HTML-документа

Если вам когда-нибудь требовалось получить все картинки с веб-страницы, этот код должен быть Вы легко сможете создать загрузчик изображений с помощью возможностей cURL

$images = array(); preg_match_all("/(img|src)=("|\")[^"\">]+/i", $data, $media); unset($data); $data = preg_replace("/(img|src)("|\"|="|=\")(.*)/i", "$3", $media); foreach ($data as $url) { $info = pathinfo($url); if (isset($info["extension"])) { if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($images, $url); } }

Удаление повторяющихся слов (не чувствителен к регистру)

Во время печатания, часто повторяются слова? Поможет это регулярное выражение.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Удаление повторяющейся пунктуации

То же самое, только для пунктуации. Попрощайтесь с двойными запятыми.

$text = preg_replace("/.+/i", ".", $text);

Поиск XML/HTML тэгов

Эта простая функция, принимает два аргумента. Первый – это тэг, который вам нужно найти, и второй – это переменная, содержащая XML или HTML. Повторюсь, эту функцию очень удобно использовать вместе с cURL.

Function get_tag($tag, $xml) { $tag = preg_quote($tag); preg_match_all("{<".$tag."[^>]*>(.*?)."}", $xml, $matches, PREG_PATTERN_ORDER); return $matches; }

Поиск XHTML/XML тэгов с определенным значением атрибута

Эта функция очень похожа на предыдущую, за исключением того, что вы можете задать тегу нужный атрибут. Например, вы легко сможете найти

.

Function get_tag($attr, $value, $xml, $tag=null) { if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($attr); $value = preg_quote($value); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; }

Поиск шестнадцатеричных значений цветов

Еще один полезный инструмент для веб-разработчика! Он позволяет вам находить/проверять шестнадцатеричные значение цвета.

$string = "#555555"; if (preg_match("/^#(?:(?:{3}){1,2})$/i", $string)) { echo "example 6 successful."; }

Поиск заголовка статьи

Этот фрагмент кода найдет и выведет на экран текст, находящийся внутри тэгов , на html-странице.

$fp = fopen("http://www.catswhocode.com/blog","r"); while (!feof($fp)){ $page .= fgets($fp, 4096); } $titre = eregi("(.*)",$page,$regs); echo $regs; fclose($fp);

Парсинг логов Apache

Большинство сайтов запущено на всем известном веб-сервере Apache. Если ваш сайт находится в их числе, почему бы не использовать PHP и регулярные выражения для разбора логов апача?

//Logs: Apache web server //Successful hits to HTML files only. Useful for counting the number of page views. "^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$" //Logs: Apache web server //404 errors only "^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$"

Замена двойных кавычек “умными” кавычками

Если вы любитель типографики, вам понравится это регулярное выражение, заменяющее обычные двойные кавычки, на “умные кавычки”. Похожее регулярное выражение используется в wordpress в контенте страницы.

Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $text);

Комплексная проверка пароля

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

Текстовое поле должно содержать как минимум один символ верхнего регистра, один нижнего регистра и одну цифру.

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)[-_a-zA-Z0-9]{6,}z"

WordPress: Использование регулярного выражения для получения картинок из записи

Поскольку многие из вас являются пользователями WordPress, вам возможно пригодится код, который позволяет получить все картинки, из текста статьи, и вывести их.

Для того, чтобы использовать этот код, просто вставьте его в любой файл вашей темы.

post_content; $szSearchPattern = "~]* />~"; // Run preg_match_all to grab all the images and save the results in $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Check to see if we have at least 1 image $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) { // Now here you would do whatever you need to do with the images // For this example the images are just displayed for ($i=0; $i < $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Генерация автоматических смайлов

Другая функция, используемая в wordpress – позволяет автоматически заменять символы смайлов на картинку смайла.

$texte="A text with a smiley:-)"; echo str_replace(":-)","",$texte);

Last update on November 27 2019 07:10:59 (UTC/GMT +8 hours)

PHP opening and closing Tags syntax

There are four different pairs of opening and closing tags which can be used in php. Here is the list of tags.

  • Default syntax
  • Short open Tags
  • Omit the PHP closing tag at the end of the file

Default Syntax

The default syntax starts with "".

Example:

Short open Tags

The short tags starts with "". Short style tags are only available when they are enabled in php.ini configuration file on servers.

Example:

Omit the PHP closing tag at the end of the file

It is recommended that a closing PHP tag shall be omitted in a file containing only PHP code so that occurrences of accidental whitespace or new lines being added after the PHP closing tag, which may start output buffering causing uncalled for effects can be avoided.

Example:

PHP Statement separation

In PHP, statements are terminated by a semicolon (;) like C or Perl. The closing tag of a block of PHP code automatically implies a semicolon, there is no need to have a semicolon terminating the last line of a PHP block.

Rules for statement separation

  • a semicolon
  • AND/OR
  • a closing PHP tag

Valid Codes

In the above example, both semicolon(;) and a closing PHP tag are present.

In the above example, there is no semicolon(;) after the last instruction but a closing PHP tag is present.

In the above example, there is a semicolon(;) in the last instruction but there is no closing PHP tag.

PHP Case sensitivity

In PHP the user defined functions, classes, core language keywords (for example if, else, while, echo etc.) are case-insensitive. Therefore the three echo statements in the following example are equal.

Example - 1

"); ECHO("We are learning PHP case sensitivity
"); EcHo("We are learning PHP case sensitivity
"); ?>

We are learning PHP case sensitivity We are learning PHP case sensitivity We are learning PHP case sensitivity

On the other hand, all variables are case-sensitive.

Consider the following example. Only the first statement display the value as $amount because $amount, $AMOUNT, $amoUNT are three different variables.

Example - 2

"); echo("The Amount is: $AMOUNT
"); echo("The Amount is: $amoUNT
"); ?>

The Amount is: 200 The Amount is: The Amount is:

PHP whitespace insensitivity

In general, whitespace is not visible on the screen, including spaces, tabs, and end-of-line characters i.e. carriage returns. In PHP whitespace doesn"t matter in coding. You can break a single line statement to any number of lines or number of separate statements together on a single line.

The following two examples are same:

Example:

"; echo "His Class is: $class and Roll No. is $roll_no"; } student_info("David Rayy", "V", 12) ?>

Example: Advance whitespace insensitivity

"; echo "His Class is: $class and Roll No. is $roll_no"; } student_info("David Rayy", "V", 12) ?>

The Name of student is: David Rayy His Class is: V and Roll No. is 12

Example: Whitespace insensitivity with tabs and spaces

In the following example spaces and tabs are used in a numeric operation, but in both cases, $xyz returns the same value.

"; // tabs and spaces $xyz = 11 + 12; echo $xyz; ?>

PHP: Single line and Multiple lines Comments

Single line comment

PHP supports the following two different way of commenting.

# This is a single line comment.

//This is another way of single line comment.

Example:

Multiple lines comments

PHP supports "C", style comments. A comment starts with the character pair /* and terminates with the character pair */.

/* This is a multiple comment testing,
and these lines will be ignored
at the time of execution */

Example:

Multiple lines comments can not be nested

First PHP Script

Here is the first PHP script which will display "Hello World..." in the web browser.

<?php echo "Hello World..."; ?>

The tags tell the web server to treat everything inside the tags as PHP code to run. The code is very simple. It uses an in-build PHP function "echo" to display the text "Hello World ..." in the web page. Everything outside these tags is sent directly to the browser.

Pictorial presentation


Combining PHP and HTML

PHP syntax is applicable only within PHP tags.

PHP can be embedded in HTML and placed anywhere in the document.

When PHP is embedded in HTML documents and PHP parses this document it interpreted the section enclosed with an opening tag () of PHP and ignore the rest parts of the document.

PHP and HTML are seen together in the following example.

PHP Page

Practice here online:

Поделитесь с друзьями или сохраните для себя:

Загрузка...