如果这是字符串
$str = 'this is a string of chars <a href="http://www.asd.com'">Anchor Text</a>';
我正在使用这个方法来清理输入
$res = get_magic_quotes_gpc() ? stripslashes($str) : $str;
$res = mysql_real_escape_string($res);
和下面的代码提取url
preg_match('#href's*?='s*?[''"]?([^''"]*)[''"]?#i', $input, $captures);
$href = $captures[1];
但是我得出了这个结果
"'"http://www.asd.com'""
包含两个双引号和反斜杠的字符串。
我想要的地方
http://www.asd.com简单地说,不要使用regexp。创建需要很长时间,调试需要更长的时间。
$str = 'this is a string of chars <a href="http://www.asd.com'">Anchor Text</a>';
$start = strpos($str, '<a href="') + strlen('<a href="');
$end = strpos($str, '">', $start);
substr($str, $start, $end-$start);
http://codepad.org/w370PJoz 此代码有效。纠正引号
$str = 'this is a string of char''s <a href="http://www.asd.com">Anchor Text</a>';
$res = get_magic_quotes_gpc() ? stripslashes($str) : $str;
$res = mysql_real_escape_string($res);
preg_match('#href's*?='s*?[''"]?([^''"]*)[''"]?#i', $str, $captures);
$href = $captures[1];
echo $href;
为什么从我的字符串
提取错误的url
因为你写的代码没有按你期望的方式执行。只是因为你想让代码做你想让它做的事情,它才没有这样做。
你需要做的是按照你想要的方式来编写(而不仅仅是想要)代码。这是一件很普遍的事情,想要不适合代码,但写可以。
在您的示例中,代码有错误,因此无法执行。这是非常致命的,PHP在这里甚至拒绝继续
想象你开车过桥,因为你想到达河的另一边。
桥的中间断了,所以你把车开进水里。
在这种情况下,PHP就是你。它会让你的代码进入天堂,它会像掉进河里一样停止。一切都完了。
所以在你再次开车到河的另一边之前,桥需要修好,因为你仍然想要,而且你已经知道你已经掉进了水里。
所以你在调试模式下启动汽车,以找出桥梁断裂的地方。如果桥梁有多处断裂,你需要多次修复桥梁。PHP有这样一个调试模式,它会告诉您运行时遇到的错误。如果有多个致命错误,它将只告诉您第一个致命错误。所以你可能需要在调试模式下驾驶多次才能最终通过河。
要在调试模式下启动PHP,只需在脚本开头输入以下命令:
error_reporting(~0); ini_set('display_errors', 1);
您可以在PHP手册中了解更多关于错误报告和调试相关操作的信息。这一行将启用报告所有类型的错误,并将确保显示错误。
使用显示给您的信息来修复代码中的错误。同样,PHP手册包含了如何编写PHP脚本的各种信息,包括如何格式化字符串以及特定函数的功能,如何调用它以及它返回的数据类型。
只要修复你遇到的每一个错误,最终你将到达桥的另一边,而不再需要调试模式。然后,您可以禁用调试模式,并确信您已经安全驾驶。
下次你再遇到问题时,你知道你需要做什么:只要再次打开调试模式并修复桥。
使用正则表达式不是解析(x)html字符串的方式。使用php的DOM类:
$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML(file_get_contents("http://google.com"));
libxml_use_internal_errors(false);
$urls = array();
foreach ($domd->getElementsByTagName("a") as $link) {
$urls[] = $link->getAttribute("href");
}
var_dump($urls);
这将创建并转储一个数组,该数组包含原始字符串(在本例中为google.com)中的所有href属性。