|
 71.5 Кб |
|
| Преамбула.
Попытка сделать обработчик textarea и скрипт, который бы сам обрамлял перед загоном в базу тегами любое количество ссылок на изображения, если они есть, и делал кликабельными обычные ссылки.
Чтобы не толочь воду, обработчики безопасности приводить тут не буду, но они есть :) С этим все ОК.
Итак.
<?
//Обработчик получает из текстареи примерно такое:
$answer=<<< DEED
http://health.cleeck.com/pictures/alco.jpg
http://i.imgur.com/KMs6b.jpg<br />Очень плохо, что женщины у нас зачастую востребованы в таких сферах, которые низкооплачиваемы и не требуют особых интеллектуальных затрат.
http://imgur.com/KMs6b Это, конечно, унижает женщин и формально тоже делает их невостребованными.
http://moikompas.ru/img/compas/2008-04-29/alkogolichka/50096422_orig.jpg Но вопрос этот довольно скользкий. Движение должно быть со всех сторон. http://dirty.ru/pages/1
Со стороны государства оно есть, со стороны женщины оно тоже должно быть. Это движение, прежде всего, к получению своего полноценного образования. http://img1.liveinternet.ru/images/attach/b/3/7/866/7866438_276bb.jpg
DEED;
//И пошли, и поехали:
$answer=pregtrim($answer); //Ф-ция фильтрации на опасн. символы, НУЛЛ-байт и т.д.
$answer=substr($answer,0,1420);
$answer=strip_tags($answer,"<br>");
//
//Find and resize pictures
$qwant_pict = preg_match_all("/http:\/\/[\w\d\/\.-_]+(.(png|jpg|gif|bmp|jpeg))/i",$answer,$pict_out);
if($qwant_pict>0){
for($i=0;$i<$qwant_pict;$i++){
$pict_url=$pict_out[0][$i];
$pict_prov=verify_image($pict_url); //Тоже ф-ция проверки на всякую гадость в теле ссылки
if($pict_prov==false){ //Если ссылка на имадж "кривая", пропускаем этот цикл
continue;
}
$size=getimagesize($pict_url);
if($size[0]>500){ //Уменьшаем масштаб выводимой картинки
$small_height=$size[1]*500/$size[0];
$small_height=round($small_height);
$small_width=500;
}
else{
$small_height=$size[1];
$small_width=$size[0];
}
$search[]=$pict_url; //Набиваем найденными ссылками на картинки массив поиска
$replace[]="<br /><br /><img src=\"{$pict_url}\" height=\"{$small_height}\" width=\"{$small_width}\" alt=\"image\" /><br />"; //Набиваем преобразованными ссылками на картинки массив замены
}
$answer1=str_replace($search,$replace,$answer); //Замена найденных ссылок на картинки
}
else{$answer1=$answer;} //Если картинок не было в полученной из текстареи строки
//echo $answer1; Это для промежуточной проверки делал...
//exit;
//По этой не запатентованной :) пока идее, все брошенные в текстарею ссылки на изображения получили вид: <br /><img src="bla-bla..." height="..." width="..." /><br /><br />
//END of Fine and Resize Pictures
//My Links
$num_links=preg_match_all("/(?<!\")(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.;~#?&//=]+)(?!\.(jpg|jpeg|gif|png|bmp|psd|ico)\")/Uis",$answer1,$link_out); //Поиск ссылок, не обрамленных кавычками и (на всякий пожарный) не заканчивающихся указанными расширениями
if($num_links>0){ //Если они есть, то:
for($i=0;$i<$num_links;$i++){
$click1=parse_url($link_out[0][$i]);
$click=$click1['host'];
$link=$link_out[0][$i];
$search[]=$link; //Забиваем найденными ссылками массив поиска
$replace[]="<a href=\"http://www.mysite.com/out.php?link=$link\" target=\"_blank\">$click</a>"; // В этом же цикле формируем соответствующую подстроку замены
}
$answer2=str_replace($search,$replace,$answer1);
}
else{$answer2=$answer1;}
echo $answer2;
exit;
//End of My Links
//
/* В итоге измененная строка из текстареи должна находиться в $answer2, но... Если нет простых ссылок, картинки ПОРОЙ обрабатываются нормально, но если попадается хоть одна, начинаются траблы */
//
$text=mysql_real_escape_string($answer2);//Дальше неинтересно...
?>
|
А полностью скрипт, бывает, срабатывает, но только на локалке с Денвером, PHP Version 5.3.3
Я не волшебник, я только учусь © И хотел бы понять, где здесь заковыка?
P.S. Все регулярки проверял по много раз в разных приложениях. С ними, вроде, все в порядке: http://www.softtime.ru/forum/files/79797-20110327222528.gif | |
|
|
|
|
|
|
|
для: Deed
(27.03.2011 в 22:16)
| | >В итоге измененная строка из текстареи должна находиться в $answer2, но... Если нет простых
>ссылок, картинки ПОРОЙ обрабатываются нормально, но если попадается хоть одна,
>начинаются траблы
Так, у нас есть ссылки и картинки, первые нужно подсветить, из вторых сделать картинки? Что происходит, если в тексте:
1) Одни картинки
2) Одни ссылки
3) Картинки и ссылки
А главное какого рода траблы начинаются? Что работает не так (ссылки не подсвечиваются или картинки)?
PS Вообще по уму лучше грести все ссылки в один preg_replace_callback(), а внутри него уже разбираться - кто изображение, а кто обычная ссылка. | |
|
|
|
|
|
|
|
для: cheops
(28.03.2011 в 12:21)
| | Доброго дня, cheops!
1) Одни картинки - все работает!
2) Одни ссылки - все работает!
3) Картинки и ссылки - тег <img> корежится повтором src=" , а вот ссылки кликабельные выводятся нормально.
Да Вы можете проверить этот скрипт на локалке, он полный. И как раз на локалке у меня он работает прекрасно, но на сервере - ни в какую. | |
|
|
|
|
|
|
|
для: Deed
(28.03.2011 в 19:14)
| | Т.е. получается, что второе регулярное выражение все-таки реагирует на ссылки-картинки, не смотря на все ухищрения во втором регулярном выражении? Вроде скрипт переварил :), сейчас попробую его переписать с использованием preg_replace_callback(), эта функция должна решить проблему и упростить регулярные выражения.
PS Кстати, с разницей на локальной машине и сервере тоже встречался и многие посетители форума - есть такая проблема. | |
|
|
|
|
|
|
|
для: Deed
(28.03.2011 в 19:14)
| | Для простоты и лучшего восприятия пока убрал обработку размеров изображений (для удобства эту процедуру лучше в отдельную функцию вынести)
<?php
//Обработчик получает из текстареи примерно такое:
$answer=<<< DEED
http://health.cleeck.com/pictures/alco.jpg
http://i.imgur.com/KMs6b.jpg<br />Очень плохо, что женщины у нас зачастую востребованы в таких сферах, которые низкооплачиваемы и не требуют особых интеллектуальных затрат.
http://imgur.com/KMs6b Это, конечно, унижает женщин и формально тоже делает их невостребованными.
http://moikompas.ru/img/compas/2008-04-29/alkogolichka/50096422_orig.jpg Но вопрос этот довольно скользкий. Движение должно быть со всех сторон. http://dirty.ru/pages/1
Со стороны государства оно есть, со стороны женщины оно тоже должно быть. Это движение, прежде всего, к получению своего полноценного образования. http://img1.liveinternet.ru/images/attach/b/3/7/866/7866438_276bb.jpg
DEED;
$answer = substr($answer, 0, 1420);
$answer = strip_tags($answer, "<br>");
// Обарабатываем ссылки
$pattern = "/(?<!\")(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.;~#?&\/=]+)/is";
$answer = preg_replace_callback($pattern, "replace", $answer);
// Выводим результат
echo $answer;
function replace($link_out)
{
// Смотрим, нет ли на конце признака изображения
// png|jpg|gif|bmp|jpeg
$pattern = "/(png|jpg|gif|bmp|jpeg)$/i";
if(preg_match($pattern, $link_out[1])) {
// Это изображение, для простоты уберем вычисление
// размеров
return "<br /><br /><img src=\"{$link_out[1]}\" alt=\"image\" /><br />";
} else {
// Это обычная ссылка
$click = parse_url($link_out[1]);
return "<a href=\"http://www.mysite.com/out.php?link={$link_out[1]}\" target=\"_blank\">{$click['host']}</a>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(28.03.2011 в 19:51)
| | Смотрел-смотрел я на вполне работоспособный код и недоумевал, почему он не работает... Стал писать его заново, почти строка в строку и осенило!!
Дело в том, уважаемый cheops, что во второй части этого скрипта я набивал новыми элементами уже заполненные в первой части массивы $search[] и $replace[]. Вот и все :)
Прекрасный скрипт. Я пока не принялся за изучение JavaScript, и данный код на PHP временно заменит WYSIWYG в открывающихся по клику ответах на комментарии.
Большое Вам спасибо. И посоветуйте бумажную книгу по ДжаваСкрипт с абсолютного нуля. | |
|
|
|
|
|
|
|
для: Deed
(29.03.2011 в 14:48)
| | >И посоветуйте бумажную книгу по ДжаваСкрипт с абсолютного нуля.
Совершенно фантастическая по охвату материала книга Дэнни Гудман, Майкл Моррисон. JavaScript. Библия пользователя, мало того что более 1000 страниц, так это только половина книги, еще половина на компакт диске в виде pdf-файлов. Правда не уверен, что для начала она подходит - можно захлебнуться, я её сам от начала до конца так и не осилил, делаю время от времени набеги на разные главы. | |
|
|
|
|
|
|
|
для: cheops
(29.03.2011 в 14:57)
| | Так и Вашу книгу «PHP в подлиннике» с наскока не осилишь :) | |
|
|
|
|