有没有办法可以将这些字符串转换为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.
类似的东西,反之亦然
答案 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);