Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как с помощью php заменять весь красный цвет шрифт


Автор: Drizhenko 20.4.2006, 05:53
Имеется html код, где прописано, что определенный шрифт будет красным цветом.
Также используется css стиль.

Подскажите, пожалуйста как с помощью php заменять весь красный цвет шрифта на другой. 

Автор: Ciber SLasH 20.4.2006, 07:47
Либо жёстко прописывать стили в тэги:
Код
echo "<h1 style='color: red'>ZZZ</h1>";

либо выдавать вместе с кодом ещё и таблицу стилей:
Код
echo "<style type='text/css'>\nh1 {color: red}\n</style><h1>ZZZ</h1>";

либо при построении всей страницы добавлять стили в раздел HEAD:
Код
echo <<< EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<style type='text/css'>
h1 {color: red}
</style>
</head>

<body>
<h1>ZZZ</h1>
</body>
</html>
EOD;
 

Автор: Drizhenko 20.4.2006, 08:33
Это все, конечно хорошо. Но есть одно НО. Я не говорил, что красным цветом у меня заголовки. Красным цветом может быть любая ЧАСТЬ текста. Вот в чем проблема. 

Автор: IvanB 20.4.2006, 08:53
Цитата(Drizhenko @  20.4.2006,  08:33 Найти цитируемый пост)
Это все, конечно хорошо. Но есть одно НО. Я не говорил, что красным цветом у меня заголовки. Красным цветом может быть любая ЧАСТЬ текста. Вот в чем проблема.  

И в чём собствнно эта проблема заключается? smile
Вставляй, что тебе Ciber SLasH написал, по границам нужного тебе текста.
Цитата(Ciber SLasH @  20.4.2006,  07:47 Найти цитируемый пост)
echo "<style type='text/css'>\nh1 {color: red}\n</style><h1>ZZZ</h1>";



Или вопрос в том, чтобы искать нужный текст и выделять его? smile 

Автор: korob2001 20.4.2006, 09:50
Цитата

Я не говорил, что красным цветом у меня заголовки. Красным цветом может быть любая ЧАСТЬ текста. Вот в чем проблема. 

Ну а что мешает тебе установить нужный цвет для другой части текста?  smile Не знаю, правильно я поня вопрос или нет, вот написал такую таблицу умножения, которая при перезагрузке изменяет цвета.  smile
Код
<html>
  <head>
    <title>Таблица умножения</title>
  </head>
  <body>
    <style type="text/css">
        td { border-width: 2px; border-color: #000000; border-style: solid };
    </style>
    <table border="0" cellspacing="5" cellpadding="5">
    <?php
        $colors = Array('red','blue','green','yellow','black','gray','brown','violet','darkviolet');
        // Выводим таблицу умножения
        for ($i=1;$i<10;$i++) {
             echo "<tr>\n";
             for ($j=1;$j<10;$j++) {
                  // Инициализируем генератор случайных чисел
                  srand(microtime()*10000000);
                  //Получаем случайный цвет из массива
                  $color = array_rand($colors);
                  // Определяем цвет шрифта, в зависимости от выбранного цвета
                  $font_color = "#000000";
                  if (($color != 3) && ($color != 7)) {
                      // Цвет фона тёмный, значит устанавливаем светлый цвет шрифта
                      $font_color = "#ffffff";
                  }
                  echo "<td bgcolor='$colors[$color]' style='color: $font_color'>$i*$j=" . ($i*$j) . "</td>\n";
             }
             echo "</tr>\n";
        }
    ?>
    </table>
  </body>
</html>

Заметь, что там где цвет фона светлый, цвет шрифта остаётся чёрным, а там где тёмный, цвет шрифта изменяется на белый.     

Автор: Drizhenko 20.4.2006, 10:37
Извиняюсь, что некоректно составил вопрос. Я не знаю в каком месте будет красный текст. Нужно его найти и поменять на другой. 

Автор: smartov 20.4.2006, 11:31
Код

$old_html = '<p style="color:red">test</p><font color="red">TEST!</font>';

$html = str_replace('red', 'blue', $old_html);
echo $html;
 

Автор: korob2001 20.4.2006, 11:57
PHP генерит страницу на сервере, стало быть ты должен знать какого цвета у тебя будет тот или иной элемент. Если ты хочешь менять на клиенте, то возможно тебе нужен JavaScript. Вот немного подправил код с таблицей умножения.
Код
<html>
  <head>
    <title>Таблица умножения</title>
  </head>
    <script language="JavaScript" type="text/javascript">
        <!--//
            var oldb = oldf = "";
            function onColor(id) {
                 var element = document.getElementById(id);
                 oldb = element.style.backgroundColor;
                 oldf = element.style.color;
                 element.style.backgroundColor = "white";
                 element.style.color = "black";
            }
            function offColor(id) {
                 var element = document.getElementById(id);
                 element.style.backgroundColor = oldb;
                 element.style.color = oldf;
            }
        //-->
    </script>
  <body>
    <style type="text/css">
        td { border-width: 2px; border-color: #000000; border-style: solid };
    </style>
    <center>
    <table border="0" cellspacing="5" cellpadding="5">
    <?php
        $colors = Array('red','blue','green','yellow','black','gray','brown','violet','darkviolet');
        // Выводим таблицу умножения
        $count = 1;
        for ($i=1;$i<10;$i++) {
             echo "<tr>\n";
             for ($j=1;$j<10;$j++) {
                  // Инициализируем генератор случайных чисел
                  srand(microtime()*10000000);
                  //Получаем случайный цвет из массива
                  $color = array_rand($colors);
                  // Определяем цвет шрифта, в зависимости от выбранного цвета
                  $font_color = "#000000";
                  if (($color != 3) && ($color != 7)) {
                      // Цвет фона тёмный, значит устанавливаем светлый цвет шрифта
                      $font_color = "#ffffff";
                  }
                  echo "<td style='background-color: $colors[$color]; color: $font_color' id='tdx$count' onmouseover=\"onColor('tdx$count')\" onmouseout=\"offColor('tdx$count')\">$i*$j=" . ($i*$j) . "</td>\n";
                  $count++;
             }
             echo "</tr>\n";
        }
    ?>
    </table>
    </center>
  </body>
</html>

Всё как и прежде, но теперь при наведении указателя мыши на ячейки таблицы, они будут менять цвет заднего фона на белый и цвет шрифта на чёрный. Когда указатель мыши покидает ячейку, она востанавливает свои цвета.  

Автор: z-END 20.4.2006, 12:04
Цитата(korob2001 @  20.4.2006,  12:57 Найти цитируемый пост)
PHP генерит страницу на сервере

нет.. 
Цитата(Drizhenko @  20.4.2006,  06:53 Найти цитируемый пост)
Имеется html код, где прописано, что определенный шрифт будет красным цветом.
Также используется css стиль.

Т.е. есть какая-то HTML верстка... нужно пропарсить его и заменить все вхождения красного цвета на определенный 

Автор: korob2001 20.4.2006, 12:22
Цитата

нет.. 

А где он её генерирует???
Цитата(z-END @  20.4.2006,  09:04 Найти цитируемый пост)
Т.е. есть какая-то HTML верстка... нужно пропарсить его и заменить все вхождения красного цвета на определенный 

В таком случае открывать файл и парсить его перед выводом, хотя не понятно зачем? PHP прекрасно встраивается в HTML + есть такие прекрасные вещи, как include, include_once, require, require_once. Хотя может я чего-то не допонимаю. ;))))
Если вёрстка находится на том же сервере, почему бы не изменить цвет прямо в ней, один раз, вместо того, что бы парсить страницу при каждой её генерации?  

Автор: z-END 20.4.2006, 12:32
Цитата(korob2001 @  20.4.2006,  13:22 Найти цитируемый пост)
 Хотя может я чего-то не допонимаю. ;))))

Именно так... например HTML-код может быть получен с другого сайта, который надо перекрасить...
 

Автор: клоп 20.4.2006, 12:46
Код

$out = str_replace("color=#ff0000", "color=#твой цвет", $out);
 

Автор: smartov 20.4.2006, 12:47
z-END, 
Цитата(z-END @  20.4.2006,  11:32 Найти цитируемый пост)
получен с другого сайта
Так получать тогда его средствами php и парсить.  

Автор: korob2001 20.4.2006, 12:49
Цитата

Именно так... например HTML-код может быть получен с другого сайта, который надо перекрасить...

Ну в этом случае да, но этот способ получения информации, так не надёжен. ;((( Парсить чужой HTML, это такое гиблое дело, хотя конечно это может быть и не HTML. 

Автор: Illuminaty 20.4.2006, 13:31
ИМХО. Тему надо перенести в JavaScript.
А метод такой: програмно пробегаешь все ноды в документе. Смотришь, чему равно у нода свойство style.color. Если "red" или #ff0000, то меняешь его на то, что нужно.
Удачи! 

Автор: Mal Hack 20.4.2006, 16:01
Цитата(Illuminaty @  20.4.2006,  13:31 Найти цитируемый пост)
програмно пробегаешь все ноды в документе. 

Это если надо смотреть и делать ограничения по изменению у тэгов. А так, 
клоп, дал правильный вариант, только можно сделать регулркой, чтоб и CSS меня одновременно. 

Автор: Drizhenko 20.4.2006, 17:56
Попробовал str_replace. Работает. Правда есть небольшое неудобство. 
Приходится писать эту строку три раза
Код

$line = str_replace('red', '#CC6600', $line);    
$line = str_replace('#ff0000', '#CC6600', $line);
$line = str_replace('#FF0000', '#CC6600', $line);    


 

Автор: smartov 21.4.2006, 11:15
Drizhenko, 
Код

$trans = array("red" => "#CC6600", "#ff0000" => "#CC6600", "#FF0000" => "#CC6600");
$line = strtr($line, $trans);
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)