当我在子域上使用这个论坛脚本时,它工作得非常好。但是当我决定将它移动到我的主索引(public_html)时,该网站就变成了空白。
起初我认为错误来自.htaccess,但我后来发现空白网站的原因是我的bbcode.php中的特定代码。
有人应该帮我查一下这段代码的错误:
private function linkify($value, $protocols = array('http', 'mail', 'https'), array $attributes = array(), $mode = 'normal')
{
// Link attributes
$attr = '';
foreach ($attributes as $key => $val) {
$attr = ' ' . $key . '="' . htmlentities($val) . '"';
}
$links = array();
// Extract existing links and tags
$value = preg_replace_callback('~(<a .*?>.*?</a>|<.*?>)~i', function ($match) use (&$links) { return '<' . array_push($links, $match[1]) . '>'; }, $value);
// Extract text links for each protocol
foreach ((array)$protocols as $protocol) {
switch ($protocol) {
case 'http':
case 'https':
$value = preg_replace_callback($mode != 'all' ? '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i' : '~([^\s<]+\.[^\s<]+)(?<![\.,:])~i', function ($match) use ($protocol, &$links, $attr) { if ($match[1]) $protocol = $match[1]; $link = $match[2] ?: $match[3]; return '<' . array_push($links, '<a' . $attr . ' href="' . $protocol . '://' . $link . '">' . $link . '</a>') . '>'; }, $value);
break;
case 'mail':
$value = preg_replace_callback('~([^\s<]+?@[^\s<]+?\.[^\s<]+)(?<![\.,:])~', function ($match) use (&$links, $attr) { return '<' . array_push($links, '<a' . $attr . ' href="mailto:' . $match[1] . '">' . $match[1] . '</a>') . '>'; }, $value);
break;
case 'twitter':
$value = preg_replace_callback('~(?<!\w)[@#](\w++)~', function ($match) use (&$links, $attr) { return '<' . array_push($links, '<a' . $attr . ' href="https://twitter.com/' . ($match[0][0] == '@' ? '' : 'search/%23') . $match[1] . '">' . $match[0] . '</a>') . '>'; }, $value);
break;
default: $value = preg_replace_callback($mode != 'all' ? '~' . preg_quote($protocol, '~') . '://([^\s<]+?)(?<![\.,:])~i' : '~([^\s<]+)(?<![\.,:])~i', function ($match) use ($protocol, &$links, $attr) { return '<' . array_push($links, '<a' . $attr . ' href="' . $protocol . '://' . $match[1] . '">' . $match[1] . '</a>') . '>'; }, $value);
break;
}
}
// Insert all link
return preg_replace_callback('/<(\d+)>/', function ($match) use (&$links) { return $links[$match[1] - 1]; }, $value);
}
我需要它来制作主题信息显示
答案 0 :(得分:0)
只需删除private
。
你的功能绝对没有问题 - 如果有的话,它也会破坏你复制它的页面。这只是你的声明:
private function linkify($value, $protocols = array('http', 'mail', 'https'), array $attributes = array(), $mode = 'normal')
此外,你说添加该功能使页面变为空白。这非常重要,因为它表示解析错误,因为如果它是其他任何内容,它将显示直到第一次调用。
现在,此声明的哪一部分可以在一个地方创建解析错误而不是另一个地方?
private function linkify($value, $protocols = array('http', 'mail', 'https'), array $attributes = array(), $mode = 'normal')
我最好猜测你的错误在于声明中的private
;在原始文件中,这可能是在一个类体中,使其完全合法,而在主索引中,它在类体中不,使其成为非法放置的关键字。