Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.06.2007, 16:58
Aka_no_Ou вне форума Посмотреть профиль Отправить личное сообщение для Aka_no_Ou Найти все сообщения от Aka_no_Ou
  № 1  
Ответить с цитированием
Aka_no_Ou

Регистрация: Jun 2007
Сообщений: 7
По умолчанию Поиск и замена по маске.

Здравствуйте, Уважаемые!
Простите, что насилую вам мозги вопросом, на который, уже наверняка, есть ответ... Простите, если по своей невнимательности я просмотрел ответ на него... Но все решения что я находил, мне не хватило знаний адаптировать под свою задачу... Но это лирика, вот собственно вопрос:

В целях увеличения знаний PHP+MySQL+Flash занялся переводом своего сайта на Flash. Сайт под управлением cms PostNuke. Все бы хорошо, но запнулся на следующем моменте: в тексте, что тяну из БД очень много тегов HTML, но все это решаемо кроме одного: FONT color... И Flash ессно доходит до этого тега и останавливается... Пробовал следующее решение:


Код:
$string = $pn_row[$i]['pn_hometext'];
$pattern[0] = "(<FONT color=mediumblue>)";
$pattern[1] = "(</FONT>)";
$pattern[2] = "(<FONT color=black>)";
$pattern[3] = "(<FONT color=#0000ff>)";
$pattern[4] = "(<FONT color=#000000>)";
$replacement[0] = "";
$replacement[1] = "";
$replacement[2] = "";
$replacement[3] = "";
$replacement[4] = "";
$text = preg_replace($pattern, $replacement, $string);

К сожалению, слишком много разных цветов встречается в тексте, поэтому такой вариант отпадает, ибо в дальнейшем могут появится и другие цвета... Стало быть, нужно сделать поиск и замену по маске? Но вот с этим у меня проблема... Никак не могу врубиться как это сделать((
В хелпе php есть пример с маской, но я его не понял (((( видимо туп-с (((

Flesh 8 (на работе) или CS (дома) - на всякий случай

Очень прошу о помощи!
Или есть более легкий вариант решения этой проблемы, который я проглядел?
Заранее благодарен за ответы!


Последний раз редактировалось Aka_no_Ou; 09.06.2007 в 18:05.
Старый 09.06.2007, 17:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Aka_no_Ou, отредактируйте свой пост и оформите код тегами [code][/code].

Старый 09.06.2007, 18:18
FFFantik вне форума Посмотреть профиль Отправить личное сообщение для FFFantik Найти все сообщения от FFFantik
  № 3  
Ответить с цитированием
FFFantik

Регистрация: May 2007
Сообщений: 22
Цитата:
Сообщение от Aka_no_Ou
Стало быть, нужно сделать поиск и замену по маске? Но вот с этим у меня проблема...
Попробуйте это =) Составил сам, шаблон покрывает все приведенные вами примеры...должен и все остальные...по идее =)
PHP код:
$textpreg_replace("/<\\/?font.*?>/i"''$string); 

Старый 09.06.2007, 21:51
Aka_no_Ou вне форума Посмотреть профиль Отправить личное сообщение для Aka_no_Ou Найти все сообщения от Aka_no_Ou
  № 4  
Ответить с цитированием
Aka_no_Ou

Регистрация: Jun 2007
Сообщений: 7
Да, огромное спасибо!!!
Именно то, что нужно!!! Я пытался аналог составить, но... Увы, мне грешному (((
А вы не могли бы пояснить что для чего в этой строчке нужно? (/<\\/?font.*?>/i" ) и что чего обозначает? Или как называется раздел хелпа, где можно об этом почитать? Думаю, эти знания мне лишними в дальнейшем не будут )))

ЗЫ. Может не совсем в тему, но забавно: этот момент разрешился, но возник другой: скриптом вывожу новости, с разбивкой по страницам, формирую линки с номерами страниц. Все замечательно, но на одной странице выводится лишь 3 новости вместо 5 (ессно и до перечня страниц дело не доходит...). Никаких тегов, которые могут сбить флеш нет. Никаких отличий в этом месте вообще не нашел. Сам скрипт отрабатывает нормально... проблема лишь во флеше (

Старый 09.06.2007, 23:28
FFFantik вне форума Посмотреть профиль Отправить личное сообщение для FFFantik Найти все сообщения от FFFantik
  № 5  
Ответить с цитированием
FFFantik

Регистрация: May 2007
Сообщений: 22
Попытаюсь объяснить =)
PHP код:
"/<\\/?font.*?>/i" 
\\ - экранируют символ /, то есть запись\\/ указывает всего лишь на один симовол /
? - квантификатор, показывающий что символ указанный до него может встречаться либо один либо ноль раз (то есть \ - может или встречаться или нет)
* - квантификатор, показывающий что символ указанный до него встречается либо ноль, либо больше раз (один, два, сто).
? после * делает квантификтор * не "жадным", про жадность хорошо не объясню, ну в общем жадные квантификаторы захыватывают так много символов как могут..
. - соответствует любому символу кроме перевода строки (\n)
i - модификатор включающий регистронезависимый поиск (модификаторы отделяются от шаблона вот этими косыми чертами "/шаблон/модификаторы", вместо косых черт можно и другие символы ставить...)
Почитать можно в мануале, на php.net:
Синтаксис регулярных выражений: http://ru2.php.net/manual/ru/referen...ern.syntax.php
Модификаторы шаблонов:
http://ru2.php.net/manual/ru/referen....modifiers.php
И там же справа ссылки на описания функций и примеры...

Вот еще статьи, где все это более простым языком объясняют (правда не так досконально как в мануале):
http://phpclub.ru/detail/article/simple_regular
http://ru.wikipedia.org/wiki/Регулярное_выражение

Старый 10.06.2007, 00:56
Aka_no_Ou вне форума Посмотреть профиль Отправить личное сообщение для Aka_no_Ou Найти все сообщения от Aka_no_Ou
  № 6  
Ответить с цитированием
Aka_no_Ou

Регистрация: Jun 2007
Сообщений: 7
Огромное спасибо за исчерпывающий ответ!
Пойду усваивать новые знания на практике

Совсем забыл спросить. Не буду множить темы, поэтому, надеюсь что вопрос не пропадет... В таблице новостей БД 136 строк. Сейчас обратил внимание, что после разбивки на страницы по 5 сообщений вывелось не все... 105 строк всего. Раньше я как-то не забегал в новости сайта, но сейчас посмотрел (там родная разбивка на страницы PostNuke) - выводятся тоже не все новости... Даже меньше. Начал играть с количеством выводимых на страницу сообщений - каждый раз, выводится разное число строк... Надеюсь, я понятно объясняю? ) Так вот, я тут подумал, наверное есть какие-то ограничения на размер текстовых данных, которые php может вывести к просмотру?

Заранее благодарен за ответы

ЗЫ... Хм... А как сделать добавление символов? к примеру font color=#000000 добавить кавычки: font color="#000000" ? перебрал кучу примеров, но так и не смог (((


Последний раз редактировалось Aka_no_Ou; 10.06.2007 в 08:22.
Старый 10.06.2007, 07:45
drwhite вне форума Посмотреть профиль Отправить личное сообщение для drwhite Найти все сообщения от drwhite
  № 7  
Ответить с цитированием
drwhite

Регистрация: Oct 2005
Адрес: /
Сообщений: 87
Отправить сообщение для drwhite с помощью ICQ
Цитата:
Сообщение от Aka_no_Ou
В таблице новостей БД 136 строк. Сейчас обратил внимание, что после разбивки на страницы по 5 сообщений вывелось не все... 105 строк всего.
Возможно, что недопродуманы арифметические операции деления натуральных чесел =), я в свое время заморачивался с выводом Х превьюшек по Y в строке, небольше Z на одной странице, где X, Y и Z — соответственно натуральные числа, X >= Y, Z = ceil(X/Y), да еще и номера страниц для ссылок, да еще и граничные номера превьюшек для каждой, вообщем пару дней ушло на нахождение оптимального варианта, но как только выяснилось, что задача имеет решение — заленился, бросил (могу дать исходники) =)

А вообще, даже phpMyAdmin и Joomla, которые бесспорно проверены и отлажены, лучше использовать для изучения грамотных решений, а движки делать самому, по максимуму используя возможности ООП.
__________________
__________________


Последний раз редактировалось drwhite; 10.06.2007 в 07:48.
Старый 10.06.2007, 06:51
drwhite вне форума Посмотреть профиль Отправить личное сообщение для drwhite Найти все сообщения от drwhite
  № 8  
Ответить с цитированием
drwhite

Регистрация: Oct 2005
Адрес: /
Сообщений: 87
Отправить сообщение для drwhite с помощью ICQ
Цитата:
\\ - экранируют символ /, то есть запись\\/ указывает всего лишь на один симовол /
запись \\ указывает на один обратный слэш \, а прямой слэш вроде не управляющий, а чтоб с ограничителями не пересекался можно так:
Код:
'{</?font.*?>}i'
а вообще если я правильно понял, то лучше так:
Код:
$text = '<font color="#ffffff">Если вам встретится тэг "<font>" немедленно выбросите его на помойку =)</font>';

$find = '{<font.[^<]+>(.+)</font>}is';
$replacement = '${1}';

echo 'Исх: '.htmlspecialchars($text).'<br />';
//Исх: <font color="#ffffff">Если вам встретится тэг "<font>" немедленно выбросите его на помойку =)</font>

echo 'Res: '.htmlspecialchars(preg_replace($find, $replacement, $text)).'<br />';
//Res: Если вам встретится тэг "<font>" немедленно выбросите его на помойку =)
__________________
__________________


Последний раз редактировалось drwhite; 10.06.2007 в 07:31.
Старый 10.06.2007, 08:44
FFFantik вне форума Посмотреть профиль Отправить личное сообщение для FFFantik Найти все сообщения от FFFantik
  № 9  
Ответить с цитированием
FFFantik

Регистрация: May 2007
Сообщений: 22
Цитата:
Сообщение от drwhite
запись \\ указывает на один обратный слэш \,
Это не так ;-) Один обратный слэш записывается в шаблоне не так \\ , а так: \\\\
Мануал стоит читать вместе с комментами юзеров ;-) Много полезного можно узнать, вот например ссылка на коммент юзера по поводу как раз таки этой проблемы: http://ru2.php.net/manual/ru/functio...lace.php#36678

Вот цитата чтобы не бегать:

Цитата:
Escaping a backslash (\) really involves not two, not three, but four backslashes to work properly.

So to match a single backslash, one should use:

preg_replace('/(\\\\)/', ...);

or to, say, escape single quotes not already escaped, one could write:

preg_replace("/([^\\\\])'/", "\$1\'", ...);

Anything else, such as the seemingly correct

preg_replace("/([^\\])'/", "\$1\'", ...);

gets evaluated as escaping the ] and resulting in an unterminated character class.

I'm not exactly clear on this issue of backslash proliferation, but it seems to involve the combination of PHP string processing and PCRE processing.

Старый 10.06.2007, 10:10
Aka_no_Ou вне форума Посмотреть профиль Отправить личное сообщение для Aka_no_Ou Найти все сообщения от Aka_no_Ou
  № 10  
Ответить с цитированием
Aka_no_Ou

Регистрация: Jun 2007
Сообщений: 7
Код:
<?
$test = "<FONT color=#CC0000>TEST</FONT>";
$patterns = "#";
$replace= "\"#";
$text = str_replace($patterns,$replace,$test);
$text1 = ereg_replace ('="#([^>]*)"','"1"',$text); 
echo $text1;
?>
Что я делаю не так? ((((((((
Пойду застрелюсь ((((

2drwhite
Да там считать-то нечего... общее кол-во разделить кол-во на странице - получаю кол-во страниц...

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:04.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.