【发布时间】:2011-10-01 05:34:57
【问题描述】:
在搜索 SO 和其他论坛也发现各种 php 函数文档后,我尝试编辑我在这里找到的一个函数(将 URL 转换为可点击的链接),以便它也可以处理嵌入式视频,不幸的是我的技能集很穷,我相信我不完全理解 create_function() 在这方面取得成功。
这是我的炒鸡蛋代码:
private function _check4Links($text){
$pattern = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';
$callback = create_function('$matches', '
$url = array_shift($matches);
$url_parts = parse_url($url);
if(preg_match("%(?:youtube\.com/(?:user/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i", $url, $match)){
return sprintf(\'<iframe title="YouTube video player" class="youtube-player" type="text/html" width="400" height="244" src="http://www.youtube.com/embed/\'.$match[1].\'" frameborder="0" allowFullScreen></iframe>\', $url, $text);
}else{
$text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
$text = preg_replace("/^www./", "", $text);
$last = -(strlen(strrchr($text, "/"))) + 1;
if ($last < 0) {
$text = substr($text, 0, $last) . "…";
}
return sprintf(\'<a target="_blank"rel="nofollow" href="%s">%s</a>\', $url, $text);
}');
return preg_replace_callback($pattern, $callback, $text);
}
我还应该提到,我不是在找人来向我展示正确的代码,我正在寻找有人向我解释为什么我的代码不起作用以及我是什么做错了。谢谢你的时间:)
【问题讨论】:
-
你为什么要为此使用 lambda 函数?里面看不到任何动态生成的代码。我认为使用正常功能进行调试会容易得多。此外,视频
sprintf()没有任何占位符。不过这不是错误。 -
@WASD42 这正是他们所使用的,所以我只是尝试尽可能少地编辑它,以保持大部分代码完好无损。你会建议我正常做吗?
-
是的,我会 :) 您的正则表达式中似乎有一个未闭合的引号 (")。
-
@WASD42,如果该引用在
preg_match()中,那么它是未转义而不是未关闭。
标签: php regex preg-match preg-replace-callback create-function