неправильное извлечение URL - PullRequest
0 голосов
/ 20 декабря 2011

Я получаю информацию от пользователя на моем сайте через текстовую область.вход может содержать TAG.
Я хочу извлечь 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];

пример

если Input жало ли это?

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

извлеченный вывод становится

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

я проверял вывод после каждой строки, после двойных кавычек

mysql_real_escape_string($res);

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

mysql_real_escape_string следует использовать только И ВСЕГДА при передаче пользовательских значений в запросы MySQL . Не используйте его ни для чего другого, используйте правильную функцию выхода для правильной задачи.

Здесь я не думаю, что вам вообще нужно использовать функцию escape. Ваше регулярное выражение выглядит хорошо, я уверен, что оно сработает, если вы удалите escape-функцию.

Кроме того, не используйте get_magic_quotes_gpc, если вы можете избежать этого. Я мог бы объяснить, почему, но я полагаю, факт, что он устарел, так как PHP5.0 является достаточным доказательством. Если ваш хост не позволяет вам отключить его, я бы рассмотрел переход на более опытный хост.

0 голосов
/ 20 декабря 2011

Почему бы вам не попробовать обработать ввод с помощью XPath, чтобы найти элементы a, а затем извлечь значение атрибута href.Я сделал нечто подобное и использовал XPath для обработки ввода, и это сработало.Избавляет от необходимости писать очень сложные выражения регулярных выражений, если вы хотите учесть другие теги позже.

Надеюсь, это поможет.

...