Php 用HTML替换字符串中的占位符

Php 用HTML替换字符串中的占位符,php,string,Php,String,有没有一种方法可以将这些字符串转换为HTML标记,反之亦然 例如: $str = 'The^ff0000 quick brown^000000 fox jumps over the lazy dog.' 输出必须是 敏捷的棕色狐狸跳过了懒狗。 类似于此,反之亦然如果^(非-000000)值始终表示一个开始的span标记,十六进制值为颜色样式,^000000始终表示结束span标记,则确保它是一个简单的字符串替换。这是一个很好的示例,您应该实现一个Decorator模式(例如:创建一个静态方法

有没有一种方法可以将这些字符串转换为HTML标记,反之亦然

例如:

$str = 'The^ff0000 quick brown^000000 fox jumps over the lazy dog.'
输出必须是

敏捷的棕色狐狸跳过了懒狗。
类似于此,反之亦然

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

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

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

$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=“^ff0000快速棕色^000000狐狸跳过了懒狗。”;
$str=str_替换(“^ff0000”,”$str);
$str=str_替换(“^000000”,“'$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=“^ff0000快速棕色^000000狐狸跳过了懒狗。”;
$str=str_替换(数组(“^ff0000”,“^000000”)、数组(“,”)、$str);
如果希望允许任意数量的颜色代码,可以执行以下操作:

$str = str_replace('^000000', '</span>', $str);
$str = preg_replace('@\^([a-f\d]{6})@i', '<span style="color:#$1;">', $str);
$str=str\u替换('^000000',''$str);
$str=preg_replace('@\^([a-f\d]{6})@i',''$str);
对于转换回(如果您没有使用任何其他
),它可以是:

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

请注意,这假设您键入的
与上述内容完全相同,没有空格变化。

由于您没有实际的结束标记,并且希望^000000表示span结束标记,我将在下面扩展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);
$string=“这只^ff0000快速棕色^000000狐狸跳过了这只懒狗。”;
//首先替换“^000000”,这样就不会在正则表达式中出现误报
$new_string=str_replace(“^000000”,”$string);
$new\u string=preg\u replace('/\^([0-9a-fA-F]+)\b/i','','$new\u string);

你有一个开始和一个结束^;那么嵌套的呢!如果字符串包含^ff00ff,那么他可能希望ff0000变成ff00ff。我认为这比你做的更难。这很好,布雷特谢谢,但是把它重新转换为^ff0000编辑如何:已经用
$str=str\u replace(“^000000”,“$str”)解决了它
$str=preg_replace('@\@i','^$1',$str);
另一个问题是,如果跨距包含颜色以外的参数,如
…它不会转换如果颜色总是在开头,您可以删除
;“>
来自
preg\u replace
。如果您的需求过于复杂,您可能需要使用某种HTML解析器,因为正则表达式(正如我使用的那样)对于解析HTML来说,它们一点也不理想,特别是如果你想处理所有的边缘情况。似乎没有人能很好地回答你的问题。你可能应该花点时间学习编写解析器(龙书很好)。