我正在尝试使用preg_replace替换
<a href="WWW.ANYURL.COM">DISPLAY_TEXT</a>
带
<a href="WWW.ANYURL.COM">DISPLAY_TEXT</a>
这是我的代码:
$string = htmlentities(mysql_real_escape_string($string1));
$newString = preg_replace('#<a\ href="([^&]*)">([^&]*)</a>#','<a href="$1">$2</a>',$string);
如果我做有限的测试,例如:
$newString = preg_replace('#<a\ href#','TEST',$string);
然后
<a href="WWW.ANYURL.COM">DISPLAYTEXT</a>
变为
TEST="WWW.ANYURL.COM">DISPLAYTEXT</a>
但如果我试图让它也匹配“=”,那就好像它找不到匹配,即
$newString = preg_replace('#<a\ href=#','TEST',$string);
返回原始内容:
<a href="WWW.ANYURL.COM">DISPLAY_TEXT</a>
我已经在这里待了几个小时,非常感谢任何帮助。
编辑:上下文中的代码
$title = clean_input($_POST['title']);
$story = clean_input($_POST['story']);
function clean_input($string)
{
if(get_magic_quotes_gpc())
{
$string = stripslashes($string);
}
$string = htmlentities(mysql_real_escape_string($string));
$findValues = array("<b>","</b>");
$newValues = array("<b>", "</b>");
$newString = str_replace($findValues, $newValues, $string);
$newString2 = preg_replace('#<a\ href="([^&]*)">([^&]*)</a>#','<a href="$1">$2</a>',$newString);
return $newString2;
}
示例$ story = Lorem ipsum dolor sit amet,consectetur adipiscing elit。 <a href="www.google.com">Google</a>
Vivamus quis sem felis。 Morbi vitae neque ac neque blandit malesuada lobortis坐在amet justo。 Donec convallis,nibh ut lacinia tempor,neque felis scelerisque nibh,在nulla的feugiat lectus erat。在et euismod nunc。 <pernicious code></code>
Pellentesque vitae ante orci,vitae ultrices neque。 <a href="www.yahoo.com">Yahoo</a>
在非nulla sapien,vestibulum faucibus metus。 Fusce egestas viverra arcu,<b>ac</b>
sagittis leo facilisis in.Nulla facilisi。
我想只允许像href和bold这样的一些标签作为代码。
答案 0 :(得分:5)
您无需手动更换任何内容。如果这是您的整个输入字符串,请使用html_entity_decode()
将转义符转回<
和>
。
同样,您的正则表达式与示例文本一样正常工作。
您的问题是过早mysql_real_escape_string()
来电。它会在html中的"
双引号中添加反斜杠,这就是反向转换失败的原因(你的正则表达式不准备找到\"
)。
避免这样做。摆脱丑陋的clean_string()
黑客和 magic_quotes 为advised by the manual。您必须先将数据库转发,然后再插入数据库,而不是更早。 (或者更好的是使用更简单的PDO with prepared statements。)
还要避免$newString123
变量重复,只需覆盖重写字符串时已有的变量。
答案 1 :(得分:1)
你也可以这样做:
$str = "<a href="WWW.ANYURL.COM">DISPLAY_TEXT</a>";
echo "Your html code is thus: " . htmlspecialchars_decode($str);