Проверка кода html php

Which function in php validate if the string is valid html?

Which function in php validate if the string is html? My target to take input from user and check if input html and not just string. Example for not html string:

sdkjshdkjdivdfadfsdf or sdkjshdkivdfadfsdf 
sdfsdfsdf fdsgfgdfgfd

Both of those strings are snippets of HTML. The former happens to be obviously invalid, but neither would pass the W3C validator without modification. I think you need to be a bit more specific about what you want to allow, and what you want to prevent.

7 Answers 7

Maybe you need to check if the string is well formed.

I would use a function like this

function check($string) < $start =strpos($string, '<'); $end =strrpos($string, '>',$start); $len=strlen($string); if ($end !== false) < $string = substr($string, $start); >else < $string = substr($string, $start, $len-$start); >libxml_use_internal_errors(true); libxml_clear_errors(); $xml = simplexml_load_string($string); return count(libxml_get_errors())==0; > 

Just a warning: html permits unbalanced string like the following one. It is not an xml valid chunk but it is a legal html chunk

Disclaimer I’ve modified the code (without testing it). in order to detect well formed html inside the string.

A last though Maybe you should use strip_tags to control user input (As I’ve seen in your comments)

@ErichBSchulz Maybe you have just to html_entity_decode($string) before testing it (quick and dirty solution but it should be sufficient)

html_entity_decode() won’t do it, for example because it would change < to a literal less-than, which would at least have the wrong meaning, and most likely be non-well-formed.

FooBar is valid HTML (even without closing p !), but this method will report errors.

You can use DomDocument’s method loadHTML

simplexml_load_string will fail if you don’t have a single root node. So if you try this html:

function check($string)< $start = strpos($string, '<'); $end = strrpos($string, '>', $start); if ($end !== false) < $string = substr($string, $start); >else < $string = substr($string, $start, strlen($string) - $start); >// xml requires one root node $string = "
$string
"; libxml_use_internal_errors(true); libxml_clear_errors(); simplexml_load_string($string); return count(libxml_get_errors()) == 0; >

Do you mean HTML or XHTML?

The HTML standard and interpretation are so loose that your first snippet might work. It won’t be pretty but you might get something.

XHTML is quite a bit more strict and at minimum will expect your snippet to be well-formed (all opened tags are closed; tags can nest but not overlap) and may throw warnings if you have unrecognized elements or attributes.

Источник

Онлайн PHP Песочница

Считаете ли вы этот инструмент полезным? То поделитесь этим с друзьями или коллегами. Это поможет нам сделать наши бесплатные веб-инструменты лучше.

Введите свой PHP код здесь для тестирования/отладки в онлайн PHP песочнице. Как и в обычных PHP файлах, вы также можете добавить HTML, но не забудьте добавить тег

Сохранить

Информация о встраивании

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

1. JavaScript Встраивание (показывает полный код, полную высоту в зависимости от количества вставляемых строк)

2. Iframe Встраивание (например, вы можете установить высоту фрейма, добавив значение CSS ‘height:100px;’)

Результат выполнения php

О PHP онлайн

Что такое PHP?

PHP (Hypertext PreProcessor) — PHP это язык сценариев на стороне сервера, разработанный в первую очередь для веб-разработки. Код PHP может быть встроен в HTML или может использоваться в сочетании с различными системами веб-шаблонов, системами управления веб-контентом и веб-фреймворками.

Что такое онлайн PHP песочница?

Онлайн PHP Песочница была создана для отладки, тестирования и запуска вашего php кода онлайн. Также это позволяет разработчикам делиться своим PHP кодом с сообществом. Этот инструмент работает с белым списком функций. Все функции, для которых требуется доступ к диску, системе или сети, занесены в черный список, другие — в белый. Максимальное время выполнения составляет 3 секунды.

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

Для разрыва строки эхо-вывода в режиме CLI необходимо использовать PHP_EOL или \n

Протестируйте свой PHP код онлайн без необходимости веб-сервера.

Могу ли я запустить PHP программу онлайн?

С помощью нашего инструмента вы можете редактировать PHP-код и просматривать результат в своем браузере.

Просто вставьте свой PHP-код в текстовое поле выше и нажмите кнопку «Выполнить», и вы получите результат выполнения PHP Онлайн.

Как проверить синтаксис PHP онлайн?

С помощью нашего инструмента вы можете вставить ваш код в PHP редоактор и он сразу же покажет синтаксические ошибки если они есть. А также вы можете попробовать запустить свой код онлайн для нахождения более скрытых проблем и ошибок.

Зачем нужно запускать PHP скрипт онлайн?

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

Источник

PHP Based HTML Validator

I need to find a PHP based HTML (as in WC3-Like) Validator that can look for invalid HTML or XHTML. I’ve searched Google a little, but was curious if anyone has used one they particularly liked. I have the HTML in a string:

And I would like to be able to test the page, and have it return the errors. (Not echo/print anything) I’ve seen:
-http://www.bermi.org/xhtml_validator
-http://twineproject.sourceforge.net/doc/phphtml.html The background for this is that I’d like to have a function/class that I run on every page, check if the file has been modified since the last access date (or something similar to that), and if it hasn’t, run the validator so I am immediately notified of invalid HTML while coding.

4 Answers 4

There’s no need to reinvent the wheel on this one. There’s already a PEAR library that interfaces with the W3C HTML Validator API. They’re willing to do the work for you, so why not let them? 🙂

Pretty cool, but you have to rely on thier webservice. This means you must be connected to a public internet. very neat though.

While it isn’t strictly PHP, (it is a executable) one i really like is w3c’s HTML tidy. it will show what is wrong with the HTML, and fix it if you want it to. It also beautifies HTML so it doesn’t look like a mess. runs from the command line and is easy to integrate into php.

If you can’t use Tidy (sometimes hosting service do not activate this php module), you can use this PHP class: http://www.barattalo.it/html-fixer/

I had a case where I needed to check partial html code for unmatched and malformed tags (mostly, eg
, a common error in my samples) and various heavy-duty validators were too much to use. So I ended up making my own custom validation routine in PHP, it is pasted below (you may need to use mb_substr instead of index-based character retrieval if you have text in different languages) (note it does not parse CDATA or script/style tags but can be extended easily):

function check_html( $html ) < $stack = array(); $autoclosed = array('br', 'hr', 'input', 'embed', 'img', 'meta', 'link', 'param', 'source', 'track', 'area', 'base', 'col', 'wbr'); $l = strlen($html); $i = 0; $incomment = false; $intag = false; $instring = false; $closetag = false; $tag = ''; while($i<$l) < while($i<$l && preg_match('#\\s#', $c=$html[$i])) $i++; if ( $i >= $l ) break; if ( $incomment && ('-->' === substr($html, $i, 3)) ) < // close comment $incomment = false; $i += 3; continue; >$c = $html[$i++]; if ( ' // open tag $intag = true; if ( '/' === $html[$i] ) < $i++; $closetag = true; >else < $closetag = false; >$tag = ''; while($i if ( !strlen($tag) ) return false; $tag = strtolower($tag); if ( $i]#', $html[$i]) ) return false; if ( $i#sim', substr($html, $i)) ) return false; if ( $closetag ) < if ( in_array($tag, $autoclosed) || (array_pop($stack) !== $tag) ) return false; >else if ( !in_array($tag, $autoclosed) ) < $stack[] = $tag; >> else if ( '>' ===$c ) < if ( $incomment ) continue; // close tag if ( !$intag ) return false; $intag = false; >> return !$incomment && !$intag && empty($stack); > 

It is a very bad idea to write your own HTML parser, especially if your code will be used on untrusted inputs. HTML is very complex. The parsing rules for HTML5 are very complicated and handle many nuanced edge cases. For some common misconceptions about HTML that may trip up «roll your own» parsers, see: alanhogan.com/html-myths#close-tags

There are cases (like mine) where a very simple custom parser was all that was needed and could not find such simple one elsewhere. So this is offered for such cases, else I totally agree with you

Источник

Читайте также:  What language is javascript written in
Оцените статью