Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 错误的url提取_Php_Regex_Extract - Fatal编程技术网

Php 错误的url提取

Php 错误的url提取,php,regex,extract,Php,Regex,Extract,我通过一个文本区域从我的站点上的用户那里获得输入。输入可能包含标签。 我想从输入中提取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, $captur

我通过一个文本区域从我的站点上的用户那里获得输入。输入可能包含标签。
我想从输入中提取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>';
我检查了每行后面的输出,后面有两个双引号

mysql_real_escape_string($res);

mysql\u real\u escape\u string
在将用户值传递到mysql查询时应仅使用且始终使用。不要将它用于其他任何事情,请为正确的任务使用正确的转义函数

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


另外,如果可以避免的话,不要使用
get\u magic\u quotes\u gpc
。我可以解释为什么,但我认为,事实上,它已经被弃用,因为PHP5.0是足够的证据。如果您的主机不允许您禁用它,我会考虑切换到一个更精明的主机。

为什么不尝试使用XPath处理输入来查找A元素,然后提取HREF属性值。我做了类似的事情,并使用XPath来处理输入,效果非常好。如果以后要考虑其他标记,则无需编写非常复杂的正则表达式


希望这有帮助。

不要调用mysql\u real\u escape\u string然后…?我之前告诉过你一些问题,不要反复复制
$res=mysql\u real\u escape\u string($res);//php 4.3及更高版本
,因为您不需要它。而且很可能您也不需要
$res=get\u magic\u quotes\u gpc()?条带斜杠($data):$data
因为现在已经禁用了魔引号。与其进行繁琐的魔引号检查,不如使用My need mysql\u real\u escape\u string函数中可能重复的一个示例函数来解决这个问题,因为我正在向数据库发送数据,并且在将数据放入查询时使用ajaxEscape同时进行筛选,我强烈建议不要这样做,因为它要求HTML是有效的XML(或XHTML)。我知道有些框架会这样做,也许这是一个品味的问题,但我相信你会因为没有实际好处而受到沉重的惩罚。如果您无法保证您的HTML是有效的XHTML,请不要这样做,否则。。去吧?抓住重点。。。我没想过。在黑名单方法中,所有用户输入都被认为是恶意的,因此假设输入是有效的XML有点愚蠢。如果在早期的验证步骤中用户输入不是有效的XHTML,那么您可以拒绝用户输入,如果您的WYSIWYG保证也生成有效的XHTML,这是很好的。
mysql_real_escape_string($res);