0

有没有办法可以将这些字符串转换为 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

4 回答 4

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>与上面完全相同,而空格没有变化。

于 2012-07-24T16:04:43.170 回答
0

Sure it is a simple string replace if the ^(non-000000) value always represents an opening span tag with the hex value being the color style and a ^000000 always means a closing span tag.

于 2012-07-24T16:02:24.360 回答
0

这是一个很好的示例,您应该在其中实现装饰器模式(例如:创建一个静态方法并使用例如explode 处理字符串并附加跨度)

于 2012-07-24T16:03:57.107 回答
0

由于您没有实际的结束标签,并且希望 ^000000 代表跨度结束标签,我将在下面扩展 Mike 的答案。

$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);
于 2012-07-24T16:24:07.590 回答