url提取错误


wrong url extraction

我通过文本区域从我的网站上获得用户输入。输入可以包含标签。
我想从输入中提取url。

$res = get_magic_quotes_gpc() ? stripslashes($data) : $data;
$res = mysql_real_escape_string($res); // php 4.3 and higher                
preg_match('#href's*?='s*?[''"]?([^''"]*)[''"]?#i', $res, $captures);                
$href = $captures[1];

如果输入字符串是这?

$data = 'any string <a href="http://www.example.com">Any Anchor</a>';

提取的输出变成

"'"http://www.example.com""

我检查了每行之后的输出,

后面有两个双引号
mysql_real_escape_string($res);

mysql_real_escape_string应该只并且总是在将用户值传递到MySQL查询时使用。不要将它用于其他任何地方,为正确的任务使用正确的转义函数。

在这里,我认为您根本不需要使用转义函数。你的正则表达式看起来很好,我相信它会工作,如果你删除转义函数。

同样,如果可以避免,不要使用get_magic_quotes_gpc。我可以解释为什么,但我想PHP5.0之后它就被弃用的事实已经足够证明了。如果你的主机不允许你禁用它,我会考虑换一个更精明的主机。

为什么不尝试使用XPath处理输入以查找a元素,然后提取href属性值呢?我做了类似的事情,并使用XPath来处理输入,效果不错。如果您以后想要考虑其他标记,则节省了编写非常复杂的正则表达式的时间。