![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Народ, помогите пожалуйста.
Нужно распарсить подключаемую html-страничку в массив. Суть в следущем, необходимо вытянуть данные с кода вида: ...всякой фигни до фига и больше...
Необходимо выдернуть данные в простой массив. Я пытался находить заключенный в CDATA тег текст, затем по идее удаляю символ каретки и получается строка по которой остается пройти регулярной функцией. Вот только ничегошеньки не выходит. Не могу вырезать этоту информацию - не вижу ее в скриптах и все тут. Помогите пожалуйста. Заранее спасибо. Добавлено через 2 минуты и 46 секунд Проблема в том, что если резать допустим по //<![CDATA[ и //]]>, то фиг его знает сколько //]]> внутри его самого, например, указанного в комментариях + возможные ошибки html кода и включения ужасных рекламных баннеров. |
|||
|
||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
|
|||
|
||||
| Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
А как быть с текстом .backgroundImage = "url('http://ссылка_которую_надо_дернуть')" ? тут получается что текст между url(' и ')
и потом предложенный preg_match_all берет из оставшегося htmvyjuj лишнего наряды с необходимой инфой: парсит из текста и других тегов ..'':';s'+screen.width+'..., например. Полчучается что едут в получившемся массиве все ключи + лишняя информация парсится. |
|||
|
||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
Ты уверен что в нужном тексте встретится //]]>?
Выбирай все, что между //<!CDATA[ и //]]> и не парься. Если уверен, что встретится, то доставай другим способом. Url:
Это сообщение отредактировал(а) enof - 23.4.2009, 14:21 |
|||
|
||||
| Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Ну я попробывал так, поскольку почему-то вышеуказанный preg_match_all("#^\s*(\w+):\s*'(.*)',\s*$#um", $str, $out); выдал пустой массив (может у мну руки кривые, но не проконало):
if (preg_match("!url\('(.*?)'\)!si",$ret1,$ok)) { echo "Тег найден, текст: $ok[1]"; } if (preg_match("!host:'(.*?)'!si",$ret1,$ok)) { echo "Тег найден, текст: $ok[1]"; } и т.д. верно? или лучше как-то по-другому? А CDATA действительно втречается один раз, только вот в чем проблема - никак не могу данные из него дернуть, знаний может не хватает. |
|||
|
||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
проверил, работает. |
|||
|
||||
| Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Я не про то, просто preg_match_all("#^\s*(\w+):\s*'(.*)',\s*$#m", $text, $out); выводит:
Array ( [0] => overstretch [1] => vid [2] => host [3] => vtag [4] => vkoid [5] => vkid [6] => link [7] => md_title [8] => folder_id [9] => md_author [10] => allowfullscreen ) просто список имен, а не данные. А preg_match_all("#\s*\.backgroundImage\s*=\s*"url\('(.*)'\)";#ui" , ....) выводит Parse error: syntax error, unexpected T_STRING in Z:\home\avaru\www\index.php on line 52 Добавлено через 3 минуты и 22 секунды Чет мне кажется, либо я недоспал, либо руки стали кривые :( |
|||
|
||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
||||
|
||||
| Zmiuko |
|
||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Попытался написать еще вот так:
Получится должно было из
что $arr[1] содержит host, vtag, vkoid, а $arr[2] данные_что_надо_дернуть напротив каждого, соответственно. Так нет же... Возвращает пустой массив, засранец : (((((( Добавлено через 2 минуты и 15 секунд Ой, прошу прощения Enof, я просто запутался. Добавлено через 2 минуты и 50 секунд СПАСИБО! ВСЕ РАЗРЕШИЛОСЬ! Добавлено через 10 минут и 57 секунд Вопрос: почему preg_match_all("#\s*\.backgroundImage\s*=\s*\"url\('(.*)'\)\";#ui", $out[1], $arr); echo $arr[1][0]; ? Почему не echo $arr[1]; , а двумерный? |
||||
|
|||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
Потому что preg_match != preg_match_all
|
|||
|
||||
| Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Блин
Вопрос решенный, а то сидел, изобретал велосипед, спасиб те! Добавлено через 1 минуту и 14 секунд Невнимательный я |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |