2012-05-01 3 views
0

У меня есть сценарий, который извлекает данные из базы данных, и на основе информации тянут, я хочу, чтобы раскрасить его и прочееИспользование preg_replace раскрасить вещи

Я хочу сделать так, что если данные тянули является

&cTe&bst 

Он заменяет его

<font style="color:#F55">Te</font><font style="color:#5FF">st</font> 

Но и мне нужно, чтобы убедиться, что я могу добавить больше и больше к нему.

Я также хотел бы, чтобы это функция, так что я могу просто сделать

$this->colorize('&cTe&bst'); 

Я использую CodeIgniter

+0

Что означает '& cTe & bst'? Для чего нужны амперсанды? Что такое 'c' и' b', которые вы оставили в выходной строке? – Jack

+0

Это для minecraft, в minecraft, если вы положили & c перед текстом, он превращает его в цвет, и я хочу иметь возможность использовать его на сайте для этого проекта, так как данные будут вытащены с этим. – unlucky4ever

+0

Существует ли стиль цвета до следующего '&'? – dreamlax

ответ

2
function colorize($in) 
{ 
    $Colors = array(
     "b" => "#000", 
     "w" => "#FFF", 
     "g" => "#AAA" 
    ); 

    $in = "<span>" . $in; 

    foreach($Colors as $Prefix => $Color) 
    { 
     $in = str_replace("&" . $Prefix, "</span><span style='color: " . $Color . "'>", $in); 
    } 

    $in .= "</span>"; 
    return $in; 
} 

Простой и удобный в использовании.

+0

Спасибо, это сработало:) – unlucky4ever

0

Вместо того, чтобы использовать <font> тег несколько раз так, используйте <span> с микросхемой таблица стилей.

<span class="blue">Te</span><span class="red">st</span> 

.blue { 
    font-color: #3F1515; 
} 

.red { 
    font-color: #153F3F; 
} 

Это сделает его более читаемым и сделает HTML намного меньшим по размеру.

Для вашего регулярное выражение попробуйте &.(.*?)(?=&|$)http://regexr.com?30qid

0

Нет необходимости использовать preg_replace, просто explode строковое по & и идти оттуда:

$colors = array('c' => '#F55', 'b' => '#5FF'); 

$str = '&cTe&bst'; 

foreach (explode('&', $str) as $text) 
{ 
    $colorCode = $text[0]; 
    $actualText = substr($text, 1); 
    echo '<span style="color:' . $colors[$colorCode] . '>' . $actualText . '</span>'; 
} 

ОТКАЗ: Непроверенные & hellip;

+0

Для этого я получаю сообщение об ошибке «Неинициализированное смещение строки: 0» для «$ colorCode = $ text [0];» – unlucky4ever

+0

Да, извините, я не тестировал его, возможно, лучше взорвать строку, «var_dump» результат и посмотреть, как его обрабатывать ... – dreamlax

+0

Это работает и все, я просто получаю эту ошибку – unlucky4ever

Смежные вопросы