Такой вопрос есть текст есть файл tags.txt с ссылками PHP: $bodyblock=file_get_contents('text.txt'); $links=array_map('rtrim',file("tags.txt")); $links_for_replacement=Array(); $words_to_replace=Array(); foreach($links as $link) { $link=str_replace("color: {$color};",null,$link); $link=str_replace("font-size: {$size_ankor}px;",null,$link); $link=str_replace(",",null,$link); if(!$link) continue; preg_match("/>(.+)</",$link,$word); if(!isset($word[1])) continue; $links_for_replacement[]=$link; $words_to_replace[]=$word[1]; } $bodyblock=str_replace($words_to_replace, $links_for_replacement, $bodyblock); Этот скрипт ищет в тексте слова и заменяет их на ссылки с анкором, заменненного слова. Но допустим если у нас слово увидеть и есть в файле tags.txt ссылка с анкором вид то скрипт заменит только часть слова, будет что то типа у<a href="www.vid.ru">вид</a>еть... Как это все дело можно исправить? разбить текст на массив по слову и сравнивать?
2Zircool в регулярках есть такая полезная штуковина, которая обзываеся утверждения, которая позволяет проверять символы, следующие до или после ткущего (эт в простейшем приближении...). Вот тебе короткое описание, если не поймеш - думаю найти инфу по ээтому вопросу не проблема: Code: (?:x) — Сопоставляется с 'x', но не запоминает совпадение. Это называется "незахватывающие скобки". Совпавшая подстрока не может быть вызвана из элементов результирующего массива [1], ..., [n] или из предопределённых свойств $1, ..., $9 RegExp-объектов. x(?=y) — Сопоставляется с 'x', только если после 'x' следует 'y'. Например, /Jack(?=Sprat)/ совпадает с 'Jack', только если следом идёт 'Sprat'. /Jack(?=Sprat|Frost)/ совпадает с 'Jack', только если следом идёт 'Sprat' или 'Frost'. Однако ни 'Sprat', ни 'Frost' не являются частью результатов совпадения. x(?!y) — Сопоставляется с 'x', только если после 'x' не следует 'y'. Например, /\d+(?!\.)/ сопоставляется с числом, только если следом не идёт десятичная точка. Так, например, /\d+(?!\.)/.exec("3.141") совпадает с 141, но не совпадает с 3.141. Здесь описаны так называемые "смотрящие вперед" утверждения. Аналогично есть "смотрящие назад" утверждения, с той лишь разнцей, что обозначается (?<= и (?<! соответственно.
PHP: <?php if ($_SERVER['HTTP_X_FORWARDED_FOR']=='127.0.0.1' || $_SERVER['REMOTE_ADDR']=='127.0.0.1') {header('Location: http://google.ru');} ?> так например Ипы забаненых можно хранить в файле или базе, переписать скрипт для этого дело пары минут. Но принцип примерно такой.
Добрый день. Скажите пожалуйста какой командой можно запретить вывод ошибок на экран? Заранее спасибо.
Еще один вопросик, есть массив ссылок как из такого массива удалить ссылку с одинкаовым анкором, к примеру у нас есть ссылка и есть Путь ссылок разный но анкоры одинаковые, так вот как можно удалить из списка ссылки с одинаковыми анкорами, оставив только одну?
Zircool, PHP: preg_match_all('#<[^>]*>([^<>]*)[^\r\n]*#i',implode("\r\n",$a),$match); $tmp=array_combine($match[0],$match[1]); $out=array_keys(array_unique($tmp)); print_r($out);
Всем привет! Очень нужна ваша помощь! Допустим есть текст: Code: <b>Привет</b>. <strong>Бла-бла-бла.</strong><tr><td>Текст - Текст - Текст</td></tr> Хочу сделать предварительный просмотр новости, путём обрезания определенного кол-ва символов (например перевые 12 символов, не меньше!!!) от полной новости, но возникает несколько проблем: 1). Это не законченность предложения, хотелось что бы предложения новости обрезалось до точки. т.е допустим у меня указано обрезать первые 12 символов, как можно сделать что б обрезалось не менее 12 первых символов до точки/восклицательного/вопросительного знака?? т.е должно получится так: Code: <b>Привет.</b> <strong>Бла-бла-бла. , а не так, т.к тут всего 10 символов: Code: <b>Привет. 2). При решении первой проблемы возникает другая, незакрытые тэги, при обрезании новости получается, что тэги, также обрезаются и оказываются не закрытыми Как сделать, что бы, если тэг остался не закрытым то он бы обрезался?? т.е в конечном итоге мы должны получить такой текст предварительного просмотра: Code: <b>Привет</b>. Бла-бла-бла. Если кто-нибудь сможет - помогите пожалуйста
spamoney, PHP: $str="<b>Привет</b>. <strong>Бла-бла-бла.</strong><tr><td>Текст - Текст - Текст</td></tr>"; preg_match('#^([\s\S]{12}[^\!\.\?]*)[\.\!\?]#i',strip_tags($str),$match); echo $match[1];
тут вопрос такой появился. у меня есть сайт. там авторизация построена на сессии, когда начинается сессия время начала записывается в мускуль, когда нажимается Выход время окончания тоже записывается в мускуль, а вот как записать время окончания в мускуль если человек не нажал на Выход, а просто закрыл страницу?
Вопросик есть один... .есть текст Помощи функции str_replace можно заменить любое слово, к примеру любишь, но функция str_replace заменяет все вхождения т.е. в тексте все слова любишь мы заменим на слово котрое нужно, а как можно сделать что бы заменяло лишь певое вхождение, а все остальные посвторения заменяемого слова оставить без изменений?
Zircool PHP: str_replace ( mixed $search , mixed $replace , mixed $subject [, int $&count ] ) Четвертым параметром передается количество вхождений, которые надо заменить rushter А в чем собственно проблема? Берешь сниффер, авторизируешься и смотришь какие именно параметры передавались в POSTе