用“input”标签替换“span”标签会导致显示额外的“<”和“>”在使用preg_replace时在php中

时间:2014-03-05 12:30:10

标签: php html

我正在尝试将带有span标签的字符串替换为输入标记,如下所示

原始字符串:

<span style="font-family: Times New Roman; font-size: 12pt;"><img width="56" height="25" src="image023.gif" style="vertical-align:middle"></span>

我要改变的字符串:

<input type="radio" value="1" name="choice"><img width="56" height="25" src="image023.gif" style="vertical-align:middle"></input>

mycode是:

$oldstr1='<span style="font-family: Times New Roman; font-size: 12pt;">';
$oldstr2='</span>';
$newstr1='<input type="radio" value="1" name="choice">';
$newstr2="</input>";
$str=A super set html content of the span i mentioned;

while (preg_match($oldstr1, $str) && preg_match($oldstr2, $str)) {

    $str = preg_replace($oldstr1,$newstr1, $str, 1);
    $str = preg_replace($oldstr2,$newstr2, $str, 1);

}

return $str;  

然而,我得到的输出是额外的“&lt;”和“&gt;”输出中的标签。喜欢“&lt;”然后是带有适当标签的单选按钮,再一次是额外的“&gt;”最后。请建议。

3 个答案:

答案 0 :(得分:3)

问题在于你的模式。 $oldstr1$oldstr2

@Flosi发布了正确的答案,但是这里有替代解决方案 - 在您的情况下,您可以使用更快的str_replace(没有while循环,您不需要更改模式):

$str = str_replace($oldstr1,$newstr1, $str);
$str = str_replace($oldstr2,$newstr2, $str);

答案 1 :(得分:2)

您没有设置分隔符,并且您的字符串未正确转义。如果你这样做就行了,例如

$oldstr1='/\<span style="font-family: Times New Roman; font-size: 12pt;"\>/';
$oldstr2='/\<\/span\>/';

答案 2 :(得分:1)

尝试在旧字符串中添加“/”。像这样:

$oldstr1='/<span style="font-family: Times New Roman; font-size: 12pt;">/';
$oldstr2='/<\/span>/';

编辑:我猜您的情况,最好使用@MarkS答案,而不是替换正则表达式。