Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заменить все теги <font> на <h>. Регулярное выражение 
:(
    Опции темы
Bikutoru
Дата 28.7.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Mal Hack
Цитата

$content = "<fonthello size=5>hgh</font>";

smile
Добавлено @ 18:56
Это было первое, что мне пришло в голову


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 28.7.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Bikutoru ну знаешь ли, это уже из разряда АИ %))))
PM ICQ   Вверх
Bikutoru
Дата 28.7.2005, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Цитата(Mal @ 28.7.2005, 20:09)
Bikutoru ну знаешь ли, это уже из разряда АИ %))))

не понял... smile В каком сиысле?
Добавлено @ 19:16
Цитата(Mal @ 28.7.2005, 20:09)
Bikutoru ну знаешь ли, это уже из разряда АИ %))))

не понял... smile В каком сиысле?


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 28.7.2005, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Bikutoru @ 28.7.2005, 20:14)
не понял... smile В каком сиысле?

В том смысле что всех условий не предусмотришь. И надо рассчитывать хоть на что-то адекватное. В конце-концов можно в первую скобку написать \s* или посое font \s?
PM ICQ   Вверх
Наставник
Дата 28.7.2005, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 4.11.2004

Репутация: 2
Всего: 15



Коллеги, тут обнаружилась проблема… ведь чем больше значение параметра size в теге <font>, тем больше отображается шрифт… а с тегом <h> все наоборот, чем меньше значение тега <h1>,<h2>…, тем больше шрифт smile -- вот такая канитель, блин.

Вот вопрос, как подправить регулярное выражение, так чтобы это проблему исправить, я сколько не думал, просто - решить проблему не смог.

Если можно вернемся к исходному варианту b]Mal Hack[/b] - ом

Код

preg_replace("#<font.+size=(\"|\'|)?([1-6]+)\\1.*>(.*)<\/font>#i", "<H\\2>\\3</H\\2>", $content);


Это сообщение отредактировал(а) Наставник - 28.7.2005, 21:38


--------------------
Богатство языка определяет широту мысли
Персональный сайт >>
PM MAIL WWW   Вверх
Mal Hack
Дата 28.7.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата
Коллеги, тут обнаружилась проблема… ведь чем больше значение параметра size в теге <font>, тем больше отображается шрифт… а с тегом <h> все наоборот, чем меньше значение тега <h1>,<h2>…, тем больше шрифт smile -- вот такая канитель, блин.

тогда только через callback вызов.

PM ICQ   Вверх
izOne
Дата 29.7.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

Репутация: 3
Всего: 4



Код

<?php
$str = '<font-dsfdsfdsfdsfds-size=4></font>'.'<FONT-size=4>И0</FONT><FONT stylex="sdsad" size=4 styley="sdsad">И0</FONT>'."\r\n".'<font size="1"> И2 </font> <font size=\'6\'>И1</font>';
$regexp = preg_replace_callback('/<font(\s+([a-z]+)=["\']?(.*?)["\']?)*\/?>(.*?)<\/font>/is', 'regexp', $str);

function regexp($m1){
    //    sizeX    hX
    echo htmlspecialchars($m1[0]);
    if(!preg_match('/<font(.*?)(?:size=["\']?(\d+)["\']?)(.*)>(.*?)<\/font>/is', $m1[0], $m2)) return $m1[0];
    static $according = array(
        '6'    =>    '1',
        '5'    =>    '2',
        '4'    =>    '3',
        '3'    =>    '4',
        '2'    =>    '5',
        '1'    =>    '6',
    );
    return '<h'.$according[$m2[2]].'>'.$m2[4].'</h'.$according[$m2[2]].'>';
}
?>


Минус в том, что одна и таже строка проверяетсся два раза регэкспом
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
Mal Hack
Дата 29.7.2005, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А так проще:
Код
<?php

 function test( $number , $str )
  {  return "<H" . ( 7 - $number ) . ">" . $str . "</H" . ( 7 - $number ) . ">";  }

$content=<<<TET
<FONT face="Courier New, Courier, mono"   color=#000099 size=1>Test #1</FONT>
<FONT face="Courier New, Courier, mono" color=#000099  size=2>Test #2</FONT>
<FONT  size=3>Test #3</FONT>
<FONT      size=4>Test #4</FONT>
<FONT-size=5>Test #5</FONT>
TET;

$reg = "#<font(?:.*?)\ssize=(\"|\'|)?([1-6]+)\\1.*>(.*)<\/font>#ie";

print $content = preg_replace($reg, "test(\"$2\" , \"$3\")", $content);
?>

PM ICQ   Вверх
Наставник
Дата 30.7.2005, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 4.11.2004

Репутация: 2
Всего: 15



Уважаемые коллеги, все было бы хорошо, но данный тип замены <font> на <h >не работает, если между тегами <font> не только текст есть но и другие теги smile, что делать ...

вот пример, на котором не работает
Код

<FONT size=5><A href="http://www.sport.ru/" target=_self>Изображение</A></FONT>


вот второй пример, на котором тоже работает
Код

<FONT size=2><U><EM><STRONG>тестовый пример</STRONG></EM></U></FONT>


Суть в том, что мешают теги внутри тега <font>, как от этого можно исправить.

Это сообщение отредактировал(а) Наставник - 30.7.2005, 12:52


--------------------
Богатство языка определяет широту мысли
Персональный сайт >>
PM MAIL WWW   Вверх
Mal Hack
Дата 30.7.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Я там в реге ошибся малость.
Код
<?php
 function test( $number , $str )
  {
  return "<H" . ( 7 - $number ) . ">" . $str . "</H" . ( 7 - $number ) . ">";
  }
$content=<<<TET
<FONT face="Courier New, Courier, mono"   color=#000099 size=1>Test #1</FONT>
<FONT face="Courier New, Courier, mono" color=#000099  size=2>Test #2</FONT>
<FONT  size=3>Test #3</FONT>
<FONT      size=4>Test #4</FONT>
<FONT size=5>Test #5</FONT>
<FONT size=5><A href="http://www.sport.ru/" target=_self>Èçîáðàæåíèå</A></FONT>
<FONT size=2><U><EM><STRONG>òåñòîâûé ïðèìåð</STRONG></EM></U></FONT>
TET;
$reg = "#<font(?:.*?)\ssize=(\"|\'|)?([1-6]+)\\1.*?>(.*)</font>#ie";
print $content = preg_replace($reg, "test(\"$2\" , \"$3\")", $content);
?>

PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.