我正在尝试将带有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;”最后。请建议。
答案 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答案,而不是替换正则表达式。