|
|
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Скажите, а как проверить в хтмл коде, равняется ли число открывающих тегов числу закрывающих? Причем ведь у некоторых тегов нет закрывающих, например <img> Извините, регекспы еще не освоил *shy* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 21:52:47 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Теги без закрывашки в соответствии с XHTML должны писаться так <tagname param1=val1 param2=val2/>. Если это правило соблюдено, то можно просто проферить XML-документ на валидность. Можно пошаманить с регулярными выражениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 22:20:06 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
А как это проверить на валидность? И как лучше? Проверить на xml валидность или шаманить с регекспами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2006, 22:01:58 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Эту задачу разработчики некоторых браузеров тоже не знают как решать :) Ну, в общем случае тебе нужен список тэгов, которым обязательно нужны замыкающие. Состав тэгов любой, например table, tr и td. Дальше классика - разбор входного потока на тэги, увеличение стека по вхождению открывающих тэгов и уменьшение по вхождению соответствующих закрывающих. Если в процессе приходит несоответствующий закрывающий тэг или по окончании потока стек ненулевой глубины - опаньки, проблема. Правда, такой механизм не справится с "валидным" html вида <i>превед <b>кросавчег</i></b> Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 13:05:35 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Ммм... а попроще как-нибудь? Ведь нам просто надо посчитать число подстрок типа "<...>" и число подстрок типа "</...>" Где "..." - теги, для которых обязательны закрывающие. Причем реально мне нужно всего несколько - в основном открывающие и закрывающие теги <table>, ячейки (допустим что теги <tr> и <td> тоже требуют обязательного закрытия) и т.д. Не поможете с регулярными выражениями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 17:24:11 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Да вроде самый простой механизм я расписал... Лично мне кажется, что разбор регэкспами будет сильно медленней. Счас попробую набросать фнукцию checkTags Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 18:02:26 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Начнем, помолясь. Вот "рыба", к кторой можно уже писать тесты. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. Теперь напишем тесты и двинемся дальше Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 18:22:01 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Извини, отвлекся на домашние дела. Итак, код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. Тесты не привожу - оставляю как упражнение. Постарайся сделать их сам. Как сделаешь - выкладывай, сравним :) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 19:59:59 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Спасибо ОГРОМНОЕ, работает на ура!!!! =) Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 19:11:53 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
DipishА я и не знал что в php тоже можно организовать стек Стек можно организовать в любом языке программирования. Если в нём есть массивы. Учите матчасть, вьюноша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 20:58:58 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Учу! Точнее учусь! =) Не судите строго, 1 курс ^_^ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 23:20:10 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
* DipishА я и не знал что в php тоже можно организовать стек Стек можно организовать в любом языке программирования. Если в нём есть массивы. Учите матчасть, вьюноша. вьюноша учитесь сами, стек можно реализовать на любом языке программирования (ну возможно существуют какие-то совсем извратные), и _массивы_ тут не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 14:19:35 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
1024byteвьюноша учитесь сами, стек можно реализовать на любом языке программирования (ну возможно существуют какие-то совсем извратные), и _массивы_ тут не при чем.Вьюноша, учите булеву алгебру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 16:07:35 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Если не дошло - то фразу надо читать как "если в A есть B, то C - возможно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 16:09:05 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
сам то понял что сказал ? учитель ёлки палки. наличие массивов не является обязательным (и тем более необходимым) требованием для реализации списков. короче, закрывайте топик, дальше только флуд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 16:14:20 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
1024byteналичие массивов не является обязательным (и тем более необходимым) требованием для реализации списков.А я что сказал? Ну слава богу, хоть дошло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 23:31:35 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Достаточным оно является. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 23:32:36 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
А что делать если у тега есть атрибуты? Тогда эта функция будет говорить что теги несоответствуют! =( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 18:07:40 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
А если покопать в таком направлении: тынц тынц и тынц ващет ПХП не очень люблю но зачем изобретать велосипед, почему не поискать готовые решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 11:39:43 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Тут специфичные нужды... К тому же функция уже есть, тока надо сделать чтобы она корректно работала для тегов с аттрибутами. Я пробовал впихивать регексп в открывающие теги типа Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 12:43:05 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
у меня есть кусок на перле для тегов с атрибутами в виде регекспа -- сразу скажу там регексп рекурсивный, чтото меня терзают смутные сомненья насчет того подойдет ли он вам если хотите могу на перле код привести ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 15:50:33 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
А нет мыслей как модифицировать написанную функцию? ap99ap помогите пожалуйста! =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 16:28:39 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Сами тэги нужно определять так: <table[^>]*> <tr[^>]*> <td[^>]*> И все, в функции ничего менять не нужно. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 17:13:50 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Не работает ;-( Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 22:02:40 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
А, ну да. Там же строится массив соответствий по содержимому тэгов. Счас, дай подумать... Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 20:33:49 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Изящно не получается. Нужна принципиально новая идея. Тупо и в лоб делается вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. Это работает, но это некрасиво и лучше придумать что-то другое. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 21:17:47 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Че-то не работает все равно! =( А может в открывающих тегах записывать только само "имя" тега, а уже внутри функции при сборке регекспа "одевать" его в треугольные скобки? Попробовал поменять строчку: Код: plaintext А изменится ли что-нибудь принципиально, если осуществлять два preg_match_all на открывающие и закрывающие теги а потом сравнить длины массивов с результатами? Причем, например, регексп для открывающих будет выглядить типа такого: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 16:05:34 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
Внесу и свою лепту в эту тему, поскольку намечается что-то подобное в будущем (только все гораздо серьезнее). 1. Начну с того, что код "<i>превед <b>кросавчег</i></b>" не является вылидным с точки зрения HTML, несмотря на то, что некоторые броузеры и обрабатывают его так, как как большинству из нас кажется правильным! Не будем же мы уподобляться броузеру и идти против стандартов. 2. В любом случае придется использовать стек (может и не в любом, но по крайней мере наиболее удобно и эффективно). Однако здесь надо учесть некоторые особенности следования тегов. Так, например, теги <td></td> должны быть заключены в теги <tr></tr>, которые в свою очередь - в теги <table></table>. 3. Такие теги, как <b>, <i> и некоторые другие, в принципе, могут и не иметь закрывающих, в то время как теги типа <td>, <div>, <table> должны иметь соответствующий закрывающий. Поэтому решение этой проблемы не является такой уж тривиальной задачей, как проверка на валидность расстановки скобок в выражении (типа "(({[{{{)}}){}{}}") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 16:41:09 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
К слову. Вопрос стоял такой: Код: plaintext Ответ: посчитать количества открывающих и закрывающих тегов и сравнить результаты. Пример: "<p><b></table></html>" - количества открывающих и закрывающих тегов одинаковы! Давайте будем чуть более точными. Может я и придираюсь, но все же часто возникают споры людей (в данном конкретном случае все, конечно, поняли, что имел в виду автор) из-за того, что каждый видит некоторые вещи в своем собственном свете. С уважением, Евгений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 16:48:42 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
DipishЧе-то не работает все равно! =( А может в открывающих тегах записывать только само "имя" тега, а уже внутри функции при сборке регекспа "одевать" его в треугольные скобки? Попробовал поменять строчку: Код: plaintext Потому что ты забыл правильно определить тэги. Вот с таким параметром tags Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 23:01:54 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
I_Work1. Начну с того, что код "<i>превед <b>кросавчег</i></b>" не является вылидным с точки зрения HTML, несмотря на то, что некоторые броузеры и обрабатывают его так, как как большинству из нас кажется правильным! Не будем же мы уподобляться броузеру и идти против стандартов. Возможно. Мне что-то такое помнилось про html то ли 3.0, то ли более ранний. I_Work2. В любом случае придется использовать стек (может и не в любом, но по крайней мере наиболее удобно и эффективно). Однако здесь надо учесть некоторые особенности следования тегов. Так, например, теги <td></td> должны быть заключены в теги <tr></tr>, которые в свою очередь - в теги <table></table>. На самом деле, тут придется использовать конечный автомат. Стек - просто удобная реализация простейшего автомата. I_Work 3. Такие теги, как <b>, <i> и некоторые другие, в принципе, могут и не иметь закрывающих, в то время как теги типа <td>, <div>, <table> должны иметь соответствующий закрывающий. Соответственно, граф переходов автомата должен это отражать - только и всего ;) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 23:09:56 |
|
||
|
(PHP) Проверка открывающих и закрывающих тегов
|
|||
|---|---|---|---|
|
#18+
вопрос решается просто до безобразия регекспом удаляет элементы не имеющие закрывашек а затем проверяем по алгоритму что все теги имеют закрывашку на перле удаляющий регехсп будет выглядеть так (удалит все конструкции типа <name параметры> <name параметры/> <name> <name/> </name> где name один из тегов img hr br meta и такдалее) на PHP переводите сами :) $html=~s/<\/?(img|hr|br|meta).*?\/?>//sg; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 15:59:43 |
|
||
|
|

start [/forum/topic.php?all=1&fid=23&tid=1465220]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 328ms |

| 0 / 0 |
