LINUX.ORG.RU

Ответ на: комментарий от arsi

Ладно, так и быть, покормлю.

Добавляем в произвольное место html-а

<img src="/path/'image'.png"/>

АП!!!

            [0] => /img/logout.png
            [1] => http://top.list.ru/counter?id=71642
            [2] => /photos/12573:-455582040.png
            [3] => /img/normal-star.gif
            [4] => /img/normal-star.gif
            [5] => /photos/25507:951063425.jpg
            [6] => /img/normal-star.gif
            [7] => /img/normal-star.gif
            [8] => /img/normal-star.gif
            [9] => /photos/40205:2047834278.png
            [10] => /img/normal-star.gif
            [11] => /photos/40205:2047834278.png
            [12] => /img/normal-star.gif
            [13] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [14] => /img/normal-star.gif
            [15] => /img/normal-star.gif
            [16] => /photos/21116:-2084017265.jpg
            [17] => /img/normal-star.gif
            [18] => /img/normal-star.gif
            [19] => /img/grey-star.gif
            [20] => /photos/25507:951063425.jpg
            [21] => /img/normal-star.gif
            [22] => /img/normal-star.gif
            [23] => /img/normal-star.gif
            [24] => /photos/25507:951063425.jpg
            [25] => /img/normal-star.gif
            [26] => /img/normal-star.gif
            [27] => /img/normal-star.gif
            [28] => /photos/12573:-455582040.png
            [29] => /img/normal-star.gif
            [30] => /img/normal-star.gif
            [31] => /photos/40205:2047834278.png
            [32] => /img/normal-star.gif
            [33] => /photos/40205:2047834278.png
            [34] => /img/normal-star.gif
            [35] => /photos/12573:-455582040.png
            [36] => /img/normal-star.gif
            [37] => /img/normal-star.gif
            [38] => /photos/25507:951063425.jpg
            [39] => /img/normal-star.gif
            [40] => /img/normal-star.gif
            [41] => /img/normal-star.gif
            [42] => /photos/40205:2047834278.png
            [43] => /img/normal-star.gif
            [44] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [45] => /img/normal-star.gif
            [46] => /img/normal-star.gif
            [47] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [48] => /img/normal-star.gif
            [49] => /img/normal-star.gif
            [50] => /photos/12573:-455582040.png
            [51] => /img/normal-star.gif
            [52] => /img/normal-star.gif
            [53] => /photos/21116:-2084017265.jpg
            [54] => /img/normal-star.gif
            [55] => /img/normal-star.gif
            [56] => /img/grey-star.gif
            [57] => /photos/21116:-2084017265.jpg
            [58] => /img/normal-star.gif
            [59] => /img/normal-star.gif
            [60] => /img/grey-star.gif
            [61] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [62] => /img/normal-star.gif
            [63] => /img/normal-star.gif
            [64] => /photos/21116:-2084017265.jpg
            [65] => /img/normal-star.gif
            [66] => /img/normal-star.gif
            [67] => /img/grey-star.gif
            [68] => /photos/21116:-2084017265.jpg
            [69] => /img/normal-star.gif
            [70] => /img/normal-star.gif
            [71] => /img/grey-star.gif
            [72] => /photos/25507:951063425.jpg
            [73] => /img/normal-star.gif
            [74] => /img/normal-star.gif
            [75] => /img/normal-star.gif
            [76] => /photos/40205:2047834278.png
            [77] => /img/normal-star.gif
            [78] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [79] => /path/'image'.png
            [80] => /music/L'amur/bla-bla.ogg
            [81] => /img/normal-star.gif
            [82] => /img/normal-star.gif
            [83] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [84] => /img/normal-star.gif
            [85] => /img/normal-star.gif
            [86] => /photos/40205:2047834278.png
            [87] => /img/normal-star.gif
            [88] => /photos/40205:2047834278.png
            [89] => /img/normal-star.gif
            [90] => /photos/21116:-2084017265.jpg
            [91] => /img/normal-star.gif
            [92] => /img/normal-star.gif
            [93] => /img/grey-star.gif
            [94] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [95] => /img/normal-star.gif
            [96] => /img/normal-star.gif
            [97] => /photos/25507:951063425.jpg
            [98] => /img/normal-star.gif
            [99] => /img/normal-star.gif
            [100] => /img/normal-star.gif
            [101] => http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
            [102] => /img/normal-star.gif
            [103] => /img/normal-star.gif
            [104] => /photos/25507:951063425.jpg
            [105] => /img/normal-star.gif
            [106] => /img/normal-star.gif
            [107] => /img/normal-star.gif
            [108] => /photos/21116:-2084017265.jpg
            [109] => /img/normal-star.gif
            [110] => /img/normal-star.gif
            [111] => /img/grey-star.gif
            [112] => http://top100-images.rambler.ru/top100/banner-88x31-rambler-black2.gif
            [113] => http://top.list.ru/counter?id=71642;t=11;l=1
            [114] => http://counter.rambler.ru/top100.cnt?29833

См. N 79.

У тебя последняя попытка и я нажимаю на слив.

r_asian ★☆☆
()
Ответ на: комментарий от arsi

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

r_asian ★☆☆
()
Ответ на: комментарий от r_asian

> У тебя последняя попытка и я нажимаю на слив.

бектрейс по сообщениям привёл меня к твоему «/<\s*img.*?src\s*=\s*[\«']{0,1}(.*?)[\»']{0,1}(\s|\/>)+/i», который даже «<img src=«facepalm.jpg»>» разобрать не может.

/me дёрнул ручку слива, и r_asian с шумом унёсся пугать крокодилов в городской канализации…

arsi ★★★★★
()
Ответ на: комментарий от arsi

> /me дёрнул ручку слива, и r_asian с шумом унёсся пугать крокодилов в городской канализации…

Беру тебя в труппу. Ни разу не видел, чтобы человек, вылезая из унитаза сам себя смывал обратно. Публика будет в восторге.

r_asian ★☆☆
()
Ответ на: комментарий от r_asian

Через DOM

<?php
$array = array(
	"/img/logout.png",
	"http://top.list.ru/counter?id=71642",
	"/photos/12573:-455582040.png",
	"/img/normal-star.gif",
	"http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif",
	"/img/grey-star.gif",
	"/photos/25507:951063425.jpg",
	"/photos/40205:2047834278.png",
	"/photos/21116:-2084017265.jpg",
	"/img/grey-star.gif",
	"/path/'image'.png",
	"/music/L'amur/bla-bla.ogg",
	"http://top100-images.rambler.ru/top100/banner-88x31-rambler-black2.gif",
	"http://top.list.ru/counter?id=71642;t=11;l=1",
	"http://counter.rambler.ru/top100.cnt?29833",
);

// create HTML
$html = "<html><body>";
foreach($array as $line) {
	$html .= sprintf("<img src=\"%s\" alt='qwerty'/>", $line);
}
$html .= "</body></html>";

// load DOM
$dom = new domDocument();
$dom->loadHTML($html);
$imgs = $dom->getElementsByTagName('img');

// check
print("TEST-1\n");
$i = 0;
foreach($imgs as $img) {
	$src = $img->getAttribute('src');
	printf("%4d - %s: %s =?= %s\n", $i, ($src === $array[$i]? "match" : "fail"), $array[$i], $src);
	$i++;
}

// -- one more time --
// create HTML
$html = "<html><body>";
foreach($array as $line) {
	$html .= sprintf("<img src = %s alt='qwerty' border>", $line);
}
$html .= "</body></html>";

// load DOM
$dom = new domDocument();
$dom->loadHTML($html);
$imgs = $dom->getElementsByTagName('img');

// check
print("\nTEST-2\n");
$i = 0;
foreach($imgs as $img) {
	$src = $img->getAttribute('src');
	printf("%4d - %s: %s =?= %s\n", $i, ($src === $array[$i]? "match" : "fail"), $array[$i], $src);
	$i++;
}
?>
:~/www$ php 1.php
PHP Warning:  DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 1 in /home/emasibut/www/1.php on line 29
PHP Warning:  DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 1 in /home/emasibut/www/1.php on line 29
TEST-1
   0 - match: /img/logout.png =?= /img/logout.png
   1 - match: http://top.list.ru/counter?id=71642 =?= http://top.list.ru/counter?id=71642
   2 - match: /photos/12573:-455582040.png =?= /photos/12573:-455582040.png
   3 - match: /img/normal-star.gif =?= /img/normal-star.gif
   4 - match: http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif =?= http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
   5 - match: /img/grey-star.gif =?= /img/grey-star.gif
   6 - match: /photos/25507:951063425.jpg =?= /photos/25507:951063425.jpg
   7 - match: /photos/40205:2047834278.png =?= /photos/40205:2047834278.png
   8 - match: /photos/21116:-2084017265.jpg =?= /photos/21116:-2084017265.jpg
   9 - match: /img/grey-star.gif =?= /img/grey-star.gif
  10 - match: /path/'image'.png =?= /path/'image'.png
  11 - match: /music/L'amur/bla-bla.ogg =?= /music/L'amur/bla-bla.ogg
  12 - match: http://top100-images.rambler.ru/top100/banner-88x31-rambler-black2.gif =?= http://top100-images.rambler.ru/top100/banner-88x31-rambler-black2.gif
  13 - match: http://top.list.ru/counter?id=71642;t=11;l=1 =?= http://top.list.ru/counter?id=71642;t=11;l=1
  14 - match: http://counter.rambler.ru/top100.cnt?29833 =?= http://counter.rambler.ru/top100.cnt?29833
PHP Warning:  DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 1 in /home/emasibut/www/1.php on line 51
PHP Warning:  DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 1 in /home/emasibut/www/1.php on line 51

TEST-2
   0 - match: /img/logout.png =?= /img/logout.png
   1 - match: http://top.list.ru/counter?id=71642 =?= http://top.list.ru/counter?id=71642
   2 - match: /photos/12573:-455582040.png =?= /photos/12573:-455582040.png
   3 - match: /img/normal-star.gif =?= /img/normal-star.gif
   4 - match: http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif =?= http://www.gravatar.com/avatar/6d6ba7ff696e579d51553cd0825dfc5f?s=150&r=g&d=http%3A%2F%2Fwww.linux.org.ru%2Fimg%2Fp.gif
   5 - match: /img/grey-star.gif =?= /img/grey-star.gif
   6 - match: /photos/25507:951063425.jpg =?= /photos/25507:951063425.jpg
   7 - match: /photos/40205:2047834278.png =?= /photos/40205:2047834278.png
   8 - match: /photos/21116:-2084017265.jpg =?= /photos/21116:-2084017265.jpg
   9 - match: /img/grey-star.gif =?= /img/grey-star.gif
  10 - match: /path/'image'.png =?= /path/'image'.png
  11 - match: /music/L'amur/bla-bla.ogg =?= /music/L'amur/bla-bla.ogg
  12 - match: http://top100-images.rambler.ru/top100/banner-88x31-rambler-black2.gif =?= http://top100-images.rambler.ru/top100/banner-88x31-rambler-black2.gif
  13 - match: http://top.list.ru/counter?id=71642;t=11;l=1 =?= http://top.list.ru/counter?id=71642;t=11;l=1
  14 - match: http://counter.rambler.ru/top100.cnt?29833 =?= http://counter.rambler.ru/top100.cnt?29833
SOmni ★★
()

Вот вам примеры на тест:

<img alt="src=test.jpg" src="/test.jpg" />
<img src="/test1.jpg" onclick="...this.src='/test2.jpg'" />
<!-- <img src="/disabled.jpg" /> -->

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Молодец. Чую, регэкспы соснут, а DOM - вряд ли. Завтра проверю.

SOmni ★★
()
Ответ на: комментарий от KRoN73
<img alt="src=test.jpg" src="/test.jpg" />
<img src="/test1.jpg" onclick="...this.src='/test2.jpg'" />
<!-- <img src="/disabled.jpg" /> -->

1-й картинка зафейлен ;-)

Array
(
    [0] => Array
        (
            [0] => <img alt="src=test.jpg"
            [1] => <img src="/test1.jpg"
            [2] => <img src="/disabled.jpg" />
        )

    [1] => Array
        (
            [0] => test.jpg
            [1] => /test1.jpg
            [2] => /disabled.jpg
        )

    [2] => Array
        (
            [0] =>
            [1] =>
            [2] =>
        )

)
r_asian ★☆☆
()
Ответ на: комментарий от arsi

Жёсткое соответствие XHTML 1.0 Transitional, табы в 4 пробела, линии не больше 80 символов etc. не практикуете?

Deleted
()
Ответ на: комментарий от arsi

К тому, что вместо того, чтобы городить заборы из реджекспов, можно просто сказать «нельзя» олухам, которые пишут не как надо. Хотя если вы редактируете код за кем попало, то это ваши проблемы и ваши заборы.

Deleted
()
Ответ на: комментарий от Deleted

> можно просто сказать «нельзя» олухам, которые пишут не как надо

В мастабе Земляшки? Да вы, батенька, прям Наполеон.

r_asian ★☆☆
()
Ответ на: комментарий от Deleted

>К тому, что вместо того, чтобы городить заборы из реджекспов, можно просто сказать «нельзя» олухам, которые пишут не как надо

1. В моём последнем примере все три варианта валидны (или легко к валидным приводятся), а последние два ещё и на практике нередко встречаются.

2. Если у тебя свой собственный проект — то зачем его парсить-то? Проще нужные данные из исходных данных извлекать. Обычно подобные задачи появляются при парсинге чужого кода чужих проектов — их авторы просто пошлют тебя с твоим «нельзя» :)

KRoN73 ★★★★★
()
Ответ на: комментарий от r_asian

> В мастабе Земляшки?
Do not want. Я и имел ввиду свой проект.

Deleted
()
Ответ на: комментарий от KRoN73

> Проще нужные данные из исходных данных извлекать.
На примере оп-поста это как? Исходные данные, отображающие связь конкретного тега с изображением, и которые при этом не нужно парсить?

Deleted
()
Ответ на: комментарий от Deleted

>На примере оп-поста это как?

Оп-пост не говорит о том, как и откуда получается HTML. А «связь конкретного тега с изображением» внутри системы вряд ли в HTML задаётся.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Оп-пост не говорит о том, как и откуда получается HTML.
Да, потому что он говорит, что HTML уже есть и его надо парсить.

А «связь конкретного тега с изображением» внутри системы вряд ли в HTML задаётся.

И хорошо бы она задавалась в CSS. Но это немногим лучше, чем парсить HTML.

Deleted
()
Ответ на: комментарий от Deleted

>Хорошо, что вы тогда понимаете под исходными данными и как там реализована привязка?%)

Обычно «исходные даные» — это табличные данные в SQL, объекты в NoSQL, в крайнем случае — какой-нибудь свой формат в plain-text. Но уж явно ни в одном нормальном проекте не хранят данные сразу внутри HTML :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

Deleted
()
Ответ на: комментарий от Deleted

>Только если эти данные представляют собой информационную ценность

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

HTML — это финальный выхлоп работы системы. И обрабатывать данные выгодно только в исходном виде.

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


Если есть готовый HTML, который нужно парсить, то это или сторонний готовый код с чужого сайта, или проект такого уровня, что его и говнопроектом-то не назовёшь, до такого звания ещё дорости нужно :D

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.