我在我的函数中添加了一些代码,以便在链接是指向图像的直接链接时显示图像。现在唯一的问题是同一篇文章下面的所有其他链接都显示损坏的图像,因为 URL 只是指向网站的链接,而不是实际图像。我不确定是否需要围绕图像做一个 if 语句来确定链接是图像链接还是 url 链接。
我在想也许可以做一个单独的函数,所以首先使用 parse 将图像链接指向不同的函数以输出图像。但是我不知道这是否可行。
$cont = preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembedimage_callback' ), $cont);
PHP
/**
* Passes on any unlinked URLs that are on their own line for potential embedding.
* @param string $contThe content to be searched.
* @return string Potentially modified $content.
*/
function parse( $cont) {
$cont = preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $cont);
return $cont;
}
/**
* Callback function for {@link AutoEmbed::parse()}.
* @param array $match A regex match array.
* @return string The embed HTML on success, otherwise the original URL.
*/
function autoembed_callback($match) {
$attr['discover'] = true;
$return = $this->get_html( $match[1], $attr );
$match[0] = preg_replace("/\[\/?(.*?)\]/", "", $match[0]);
$match[0] = preg_replace("/\<\/?(.*?)\>/", "", $match[0]);
$image_file = ''.$match[1].'';
$embedded = '<img id="feed" src="'.$image_file.'" onerror="this.style.display=\'none\';" />';
$m = trim(strtolower($match[0]));
$m = str_replace("http://", "", $m);
$m = str_replace("https://", "", $m);
$m = str_replace("ftp://", "", $m);
$m = str_replace("www.", "", $m);
if (strlen($m) > 25) {
$m = substr($m, 0, 25) . "...";
}
if($attr['discover'] = true) {
$return = $this->get_html( $match[1], $attr );
}
return "<a href=\"$match[0]\" target=\"_blank\">$m</a>\n$return\n\n$embedded\n";
}