Bbcode"私人功能linkify"导致网站空白

时间:2016-08-20 18:25:26

标签: php bbcode

当我在子域上使用这个论坛脚本时,它工作得非常好。但是当我决定将它移动到我的主索引(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);
}

我需要它来制作主题信息显示

1 个答案:

答案 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;在原始文件中,这可能是在一个类体中,使其完全合法,而在主索引中,它在类体中,使其成为非法放置的关键字。