用HTML代替字符串中的占位符

时间:2012-07-24 15:59:38

标签: php string

有没有办法可以将这些字符串转换为HTML标签,反之亦然?

示例:

$str = 'The^ff0000 quick brown^000000 fox jumps over the lazy dog.'

输出必须

The<span style="color:#ff0000;"> quick brown</span> fox jumps over the lazy dog.

类似的东西,反之亦然

4 个答案:

答案 0 :(得分:1)

如果您只讨论几个特定代码,可以使用:

$str = "The^ff0000 quick brown^000000 fox jumps over the lazy dog.";
$str = str_replace('^ff0000', '<span style="color:#ff0000;">', $str);
$str = str_replace('^000000', '</span>', $str);

或者如果您愿意:

$str = "The^ff0000 quick brown^000000 fox jumps over the lazy dog.";
$str = str_replace(array('^ff0000', '^000000'), array('<span style="color:#ff0000;">', '</span>'), $str);

如果您希望允许任意数量的颜色代码,您可以这样做:

$str = str_replace('^000000', '</span>', $str);
$str = preg_replace('@\^([a-f\d]{6})@i', '<span style="color:#$1;">', $str);

对于转换回来(如果您没有使用任何其他</span>),则可能是:

$str = str_replace('</span>', '^000000', $str);
$str = preg_replace('@<span style="color:#([a-fA-F\d]{6});">@', '^$1', $str);

请注意,这假设您完全按照上面的内容键入<span>,而且没有空白的可变性。

答案 1 :(得分:0)

如果^(非000000)值始终表示开始范围标记,其中十六进制值为颜色样式,则^ 000000始终表示结束范围标记,这是一个简单的字符串替换。

答案 2 :(得分:0)

这是一个很好的例子,你应该在其中实现一个Decorator patern(例如:使用一个静态方法并使用explode处理字符串并附加跨度)

答案 3 :(得分:0)

由于您没有实际的结束标记,并希望^ 000000代表范围结束标记,我将在下面展开迈克的答案。

$string = "The^ff0000 quick brown^000000 fox jumps over the lazy dog.";

// replace '^000000' first so we don't get false positives in the regex
$new_string = str_replace('^000000', '</span>', $string);

$new_string = preg_replace('/\^([0-9a-fA-F]+)\b/i', '<span style="color: #$1;">', $new_string);