|
|
|
| пытаюсь выбрать адреса всех картинок, но не совсем получается
<?php
$text = '<img src="/images/diamond.gif">
<img src="/images/spade.gif">
<img src="/images/heart.gif">
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">';
$pattern = '#img src=([^\s]+)\s#';
preg_match_all($pattern, $text, $out);
?>
|
в итоге нужно чтобы было
/images/diamond.gif
/images/spade.gif
/images/heart.gif
http://img109.imageshack.us/img109/2109/statbi.jpg
помогите пожалуйста | |
|
|
|
|
автор: duv (17.11.2009 в 16:32) |
|
|
для: t3ma
(17.11.2009 в 15:21)
| |
$pattern='/["]([^"]+)["]/';
|
| |
|
|
|
|
|
|
|
для: t3ma
(17.11.2009 в 15:21)
| | А адрес всегда в двойные кавычки заключен? Если да, то можно использовать следующее регулярное выражение
<?php
$text = '<img src="/images/diamond.gif">
<img src="/images/spade.gif">
<img src="/images/heart.gif">
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">';
$pattern = '#img src=\"([^\"]+)\"#';
preg_match_all($pattern, $text, $out);
echo "<pre>";
print_r($out[1]);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(17.11.2009 в 16:35)
| | спасибо большое
а как потом этот массив использовать ?
делаю так: неполучается
почему-то всегда ставится строка <img style="cursor:pointer;" rel=lightbox-tour width=600 height=450
даже если картинка меньше 700*1200.
<?php
$text = '<img src="/images/diamond.gif">
<img src="/images/spade.gif">
<img src="/images/heart.gif">
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">';
$pattern = '#img src=\"([^\"]+)\"#';
preg_match_all($pattern, $text, $out);
foreach ($out[1] as $value) {
$size = getimagesize($value);
if ($size[0] >= 700 or $size[0] >= 1200) {
$text = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour width=600 height=450', $text);
} else {
$text = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour', $text);
}
}
echo $text;
?>
|
| |
|
|
|
|
автор: duv (17.11.2009 в 20:20) |
|
|
для: t3ma
(17.11.2009 в 18:30)
| | Может быть,строка
if ($size[0] >= 700 or $size[0] >= 1200)
| ,
должна выглядеть так:
if ($size[1] >= 700 or $size[0] >= 1200)
|
? | |
|
|
|
|
|
|
|
для: duv
(17.11.2009 в 20:20)
| | да, конечно
вот так
if ($size[0] >= 700 or $size[1] >= 1200)
|
но это сути дела не меняет.. ) таже проблема :( | |
|
|
|
|
автор: .... (17.11.2009 в 22:34) |
|
|
для: t3ma
(17.11.2009 в 21:15)
| | > $text = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour', $text);
с такими заменами во всём тексте столько раз сколько там картинок
У Вас ещё не плохо получилось :)
наверное потомучто если путь к файлу не начинается с http:// то он воспринимается как путь в файловой системе , а там / это корень диска, а не корень сайта | |
|
|
|
|
|
|
|
для: ....
(17.11.2009 в 22:34)
| | дело тоже не в этом :(
проверьте сами вот код:
<?php
$text = '<img src="http://weaktight.com/img/d5/hQ.gif">
<img src="http://weaktight.com/img/d5/sA.gif">
<img src="http://weaktight.com/img/d5/dJ.gif">
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">';
$pattern = '#img src=\"([^\"]+)\"#';
preg_match_all($pattern, $text, $out);
foreach ($out[1] as $value) {
$size = getimagesize($value);
if ($size[0] >= 700 or $size[1] >= 1200) {
$text = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour width=600 height=450', $text);
} else {
$text = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour', $text);
}
}
echo $text;
?>
|
| |
|
|
|
|
автор: .... (18.11.2009 в 11:21) |
|
|
для: t3ma
(18.11.2009 в 09:52)
| | Вам нужна preg_replace_callback();
получится похоже на это
<?
function cb_f($match) {
$size = getimagesize($match[1]);
return '<img style="border:solid 5px red; width:'
. $size[0] .'px; height:' .$size[1] . 'px;" src="' . $match[1] . '"/>';
}
echo $txt = preg_replace_callback('#<img[^>]+?\bsrc=[\'"]?([^\s>\'"]+)[^>]*?>#', 'cb_f', $txt);
|
и это упрощённо, не проверяется начинается-ли адрес с \
, нет этого 700 or $size[1] >= 1200
и вообще не проверял есть-ли ошибки
думаю очень медленно это всё будет работать учитывая подзапросы
а так можно просто задать в стилях max-width и max-height
, только не все браузеры могут это поддерживать | |
|
|
|
|
|
|
|
для: ....
(18.11.2009 в 11:21)
| | Попробуйте так:
<?php
$text = array('<img src="http://weaktight.com/img/d5/hQ.gif">',
'<img src="http://weaktight.com/img/d5/sA.gif">',
'<img src="http://weaktight.com/img/d5/dJ.gif">',
'<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">');
$pattern = '#img src=\"([^\"]+)\"#';
for($i=0;$i<count($text);$i++)
{
if(preg_match($pattern, $text[$i], $out))
{$size = getimagesize($out[1]);
if ($size[0] >= 700 or $size[1] >= 1200)
$text[$i] = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour width=600 height=450', $text[$i]);
else
$text[$i] = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour', $text[$i]);
}
}
echo implode(",", $text);
?>
|
| |
|
|
|
|
|
|
|
для: duv
(18.11.2009 в 17:14)
| | так к сожалению не подойдет так как $text содержит не только ссылки но и различныt другие символы | |
|
|
|
|
|
|
|
для: ....
(18.11.2009 в 11:21)
| | огромное спасибо | |
|
|
|