我通过文本区域从我的网站上的用户那里获得了输入。输入可以包含< 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);
答案 0 :(得分:2)
mysql_real_escape_string
只应在将用户值传递给MySQL查询时始终使用。不要将它用于其他任何事情,使用正确的转义函数来完成正确的任务。
在这里,我认为你根本不需要使用转义功能。你的正则表达式看起来很好,我相信如果你删除了转义函数它会起作用。
另外,如果可以避免,请不要使用get_magic_quotes_gpc
。我可以解释一下为什么,但我认为它已被弃用,因为PHP5.0足够证据。如果您的主机不允许您禁用它,我会考虑切换到更精明的主机。
答案 1 :(得分:0)
为什么不尝试使用XPath处理输入以查找a元素,然后提取href属性值。我做了类似的事情,并使用XPath来处理输入,它是一种享受。如果您想稍后考虑其他标记,则可以节省编写非常复杂的正则表达式的费用。
希望这有帮助。