Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 5 / 2
Регистрация: 04.07.2010
Сообщений: 200
1

Получение текста, обрамленного тегами

28.07.2013, 21:27. Показов 1411. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как получить текст который обрамлен тегами.Например выцепить "Знак"(Ниже в примере)
Есть ли готовые парсеры или хотя бы верный способ против всех бед(нет текста в заголовке, как то не так оформлен, ошибка в синтаксисе то есть кавычек забыли поставить и т.п.)

Пример
PHP
1
2
3
4
5
$ varr='<table>
  <caption title="Назв">Знак</caption>
<tr>
  <th>Д</th><th>н</th><th>о</th>
</tr><!--итд-->
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2013, 21:27
Ответы с готовыми решениями:

Работа с тегами в текста
Здравствуйте! Допустим есть такой текст: Имя: &quot;Валера&quot;, Возраст: &quot;18&quot;, Имя: &quot;Вика&quot;, Возраст:...

поиск текста в файлах php между тегами
Всем привет. Есть такая вот проблема. Покопался в инете, мало что нашел. Есть у меня сайт файловый....

Найти текст между тегами и создать файлы из этого текста
Здравствуйте! Есть задача, помогите ее решить. Например, имеем текстовый файл 1.txt Нужно...

Получение текста страницы
как в php переменную записать текст страницы в которой находится данная переменная и этот php код?

7
19 / 19 / 3
Регистрация: 26.07.2013
Сообщений: 61
28.07.2013, 22:32 2
мне кажется, самый простой способ- воспользоваться командой "strip_tags"
0
5 / 5 / 2
Регистрация: 04.07.2010
Сообщений: 200
28.07.2013, 23:03  [ТС] 3
rus_dao, ну неплохо но
Внимание

Из-за того, что strip_tags() не проверяет валидность HTML, то частичные или сломанные теги могут послужить удалением большего количества текста или данных, чем ожидалось.
1
19 / 19 / 3
Регистрация: 26.07.2013
Сообщений: 61
28.07.2013, 23:19 4
"частичные или сломанные теги" это достаточно редкое явление. но мне приходилось пару раз писать специальные регулярки на незакрытый тег и прочую глупость. просто проверять надо всегда валидность своего кода.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
28.07.2013, 23:33 5
Цитата Сообщение от evil0o Посмотреть сообщение
верный способ против всех бед
скажите, что должно получиться в результате парсинга такой строки:
HTML5
1
<<<html!mydata<!--<![CDATA[hello</html><head>]</head>>>>><>my<li<li/>tratata]]><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">-->
?
0
KOPOJI
29.07.2013, 00:14
  #6

Не по теме:

Цитата Сообщение от NEbO Посмотреть сообщение
скажите, что должно получиться в результате парсинга такой строки
..только без мата)

1
5 / 5 / 2
Регистрация: 04.07.2010
Сообщений: 200
29.07.2013, 01:24  [ТС] 7
ну давайте к делу)). У меня тут куча таблиц и лишних хр.ней кое где классы левые, кое где надо привернуть классы.
Ну не верю я что нет готовых парсеров для вставки или удадления тегов, классов, ссылок и т.п.

Добавлено через 1 минуту
я конечно кое что сделал что срочно было. через функции по работе с текстом. Но не покидает ощущение велосепедостроения

Добавлено через 7 минут
Цитата Сообщение от rus_dao Посмотреть сообщение
"частичные или сломанные теги" это достаточно редкое явление. но мне приходилось пару раз писать специальные регулярки на незакрытый тег и прочую глупость. просто проверять надо всегда валидность своего кода.
ага , если бы мой код был бы, а сооружать что то будет отправлять код на проверку валидности.. мне кажется не таким и легким. Хотя если вы можете предложить вариант?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
29.07.2013, 08:26 8
ну хорошо, если данные свои -- это уже совсем другая задача. тогда пример можно упростить, но! вы сказали "незакрытые теги" и "незакрытые аттрибуты". ну вы сами понимаете, что даже браузеры такую страницу отрендерить могут по-разному? Вы хотите сделать получше, чем все эти гугли, мозиллы, майкрософты, эпплы?
Ну хорошо, допустим, возможность есть. Я думаю, вам подойдет средство для парсинга контекстно-зависимых грамматик. Я почти уверен, что подойдет! http://en.wikipedia.org/wiki/C... ve_grammar и http://en.wikipedia.org/wiki/G... ve_grammar . Как думаете, почему в браузерах они не реализованы? правильно, из-за NP-сложности. Готовых средств для парсинга этих грамматик в пхп нет, и наврядли они появятся в ближайшее время.
Другой вариант -- использовать GLR парсеры, которых для php я также еще не встречал. Если б вы за это взялись, я постарался бы помочь вам в реализации. Мне просто интересно в чисто академических целях, да и парсер такой -- полезный, нужный, для некоторого рода задач. Но я сам в алгоритме не совсем до конца разобрался. Однако, следует заметить, что правила вы для него все равно замучаетесь составлять. Хотябы потому что и по-человечески это сделать затруднительно. Возьмите строку:
HTML5
1
<html attr=">some long text <b>sdasdas</b> .... (еще длинный текст, на одной строчке)</html>"</html>
что тут считать правильно? незакрытые теги или аттрибуты в приоритете? Ну хорошо. Предположим, результатом должен быть просто текст, без "уголков", т.е. не под тегами.
Тогда возьмите даже валидный код
HTML5
1
<a href="javascript:document.write('<b>Hello, world</b>')">Some text</a>
Тут уже, разумеется, нужно брать во внимание аттрибуты, и тегам отдавать ровно то значение, которое под них отведено.
В любой КС грамматике вы не сможете задать, скажем, ограничение на длину атрибута, в зависимости от общей длины тега. А по предыдущим двум примерам это вполне себе удобная эвристика. Также, вы не сможете подсчитать, являются ли следующие, начиная с текущей позиции, символы "похожими" (с учетом возможных повторных ошибок) на строку исходной грамматики. Даже с GLR будет все это сделать достаточно проблематично. КЗ больше подойдут, особенно для разных эвристик. Но их нереально сделать быстрыми -- как я уже сказал, это очевидная NP-задача.

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

Вы наверняка хотите сказать, что у вас в базе такого нет. И все нормально. Ну тогда и применяйте "нормальные средства", такие как strip_tags. Опять же, я не в курсе, насколько у вас там все плохо, поэтому проверьте, что получится. Вырежет что-то лишнее -- придется возиться вручную. Это наиболее простой вариант.
Чуть посложнее, но тоже "нормальный": использовать средства вроде PhantomJS, которые и делают что по сути эмулируют браузер. Правда, конечно, это уже не php (ну разве что через расширение v8 попытаться как-то его подрубить, если ну ооочень нада). Т.е. фактически вы можете получить на выходе такую структуру, как ее увидит браузер. А в нем наверняка полным-полно всяких готовых эвристик. Можете также глянуть в исходники той же мозиллы или вебкита.

И все-таки, я бы рекомендовал вам не мучаться, и попробовать strip_tags. Если уж он не справится, тогда говорите конкретно, какие правила, что и как у вас есть в базе, такое, что он вырезает неправильно. Посмотрите в вашу базу (вы же ее знаете лучше любого находящегося на этом форуме!) -- может, у вас там никогда какой-то тег не закрывается, может, какой-то аттрибут, может после чего-то там следует чего-то там. И другие правила. Не универсальные, а применимые только в вашей базе. И если этих правил наберется немного, то вполне может быть, что получится свести грамматику к регулярной, или КС с небольшим (n).
Просто напишите их сюда, и мы вместе постараемся составить для вас нужные регулярки

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

Добавлено через 3 минуты

Не по теме:

о, даже валидный код не подсветился как нужно:) Валидный! А вы хотите заведомо невалидный, и универсально. Ну-ну:)

1
29.07.2013, 08:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2013, 08:26
Помогаю со студенческими работами здесь

RegXp и получение текста в определенном месте
Всем привет! Есть строка фыава.ываыва.ываыва.ываыва, помогите получить текст, который находится...

Извлечение текста между тегами
Здравствуйте. Помогите составить регулярное выражение. Есть, к примеру, html: ...

Извлечение текста между тегами
Все привет. есть пару текстов с разными ид &lt;div id=&quot;news-id-1&quot;&gt;текст1&lt;/div&gt; &lt;div...

Найти текст между тегами и создать файлы из этого текста
Здравствуйте! Есть задача, помогите ее решить. Например, имеем текстовый файл 1.txt Нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru