有没有办法可以将这些字符串转换为 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.
类似的东西,反之亦然
如果您只是在谈论一些特定的代码,您可以使用:
$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>
与上面完全相同,而空格没有变化。
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.
这是一个很好的示例,您应该在其中实现装饰器模式(例如:创建一个静态方法并使用例如explode 处理字符串并附加跨度)
由于您没有实际的结束标签,并且希望 ^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);