错误的网址提取

时间:2011-12-19 23:13:01

标签: php regex extract

我通过文本区域从我的网站上的用户那里获得了输入。输入可以包含< a>。 TAG。
我想从输入中提取网址。

$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);

2 个答案:

答案 0 :(得分:2)

mysql_real_escape_string只应在将用户值传递给MySQL查询时始终使用。不要将它用于其他任何事情,使用正确的转义函数来完成正确的任务。

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

另外,如果可以避免,请不要使用get_magic_quotes_gpc。我可以解释一下为什么,但我认为它已被弃用,因为PHP5.0足够证据。如果您的主机不允许您禁用它,我会考虑切换到更精明的主机。

答案 1 :(得分:0)

为什么不尝试使用XPath处理输入以查找a元素,然后提取href属性值。我做了类似的事情,并使用XPath来处理输入,它是一种享受。如果您想稍后考虑其他标记,则可以节省编写非常复杂的正则表达式的费用。

希望这有帮助。