Добавить цель _blank к внешней ссылке - Parsedown PHP

Mitch спросил: 13 октября 2017 в 06:48 в: php

Я использую Parsedown для анализа HTML из базы данных на моем сайте. С помощью Parsedown вы не можете добавить target="_blank" к ссылкам.

Поэтому я пытаюсь добавить target="_blank" в external ссылки. Я нашел эту функцию в Parsedown.php:

protected function inlineLink($Excerpt)
{
    $Element = array(
        'name' => 'a',
        'handler' => 'line',
        'text' => null,
        'attributes' => array(
            'href' => null,
            'title' => null,
        ),
    );    $extent = 0;    $remainder = $Excerpt['text'];    if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches))
    {
        $Element['text'] = $matches[1];        $extent += strlen($matches[0]);        $remainder = substr($remainder, $extent);
    }
    else
    {
        return;
    }    if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches))
    {
        $Element['attributes']['href'] = $matches[1];        if (isset($matches[2]))
        {
            $Element['attributes']['title'] = substr($matches[2], 1, - 1);
        }        $extent += strlen($matches[0]);
    }
    else
    {
        if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
        {
            $definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
            $definition = strtolower($definition);            $extent += strlen($matches[0]);
        }
        else
        {
            $definition = strtolower($Element['text']);
        }        if ( ! isset($this->DefinitionData['Reference'][$definition]))
        {
            return;
        }        $Definition = $this->DefinitionData['Reference'][$definition];        $Element['attributes']['href'] = $Definition['url'];
        $Element['attributes']['title'] = $Definition['title'];
    }    $Element['attributes']['href'] = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Element['attributes']['href']);    return array(
        'extent' => $extent,
        'element' => $Element,
    );
}

Теперь я попробовал следующее (добавил комментарий о том, что я изменил):

protected function inlineLink($Excerpt)
{
    $Element = array(
        'name' => 'a',
        'handler' => 'line',
        'text' => null,
        'attributes' => array(
            'href' => null,
            'target' => null, // added this
            'title' => null,
        ),
    );    $extent = 0;    $remainder = $Excerpt['text'];    if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches))
    {
        $Element['text'] = $matches[1];        $extent += strlen($matches[0]);        $remainder = substr($remainder, $extent);
    }
    else
    {
        return;
    }    if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches))
    {
        $Element['attributes']['href'] = $matches[1];        if (isset($matches[2]))
        {
            $Element['attributes']['title'] = substr($matches[2], 1, - 1);
        }        $extent += strlen($matches[0]);
    }
    else
    {
        if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
        {
            $definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
            $definition = strtolower($definition);            $extent += strlen($matches[0]);
        }
        else
        {
            $definition = strtolower($Element['text']);
        }        if ( ! isset($this->DefinitionData['Reference'][$definition]))
        {
            return;
        }        $Definition = $this->DefinitionData['Reference'][$definition];        $Element['attributes']['href'] = $Definition['url'];
        if (strpos($Definition['url'], 'example.com') !== false) { // added this aswell, checking if its our own URL
            $Element['attributes']['target'] = '_blank';
        }
        $Element['attributes']['title'] = $Definition['title'];
    }    $Element['attributes']['href'] = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Element['attributes']['href']);    return array(
        'extent' => $extent,
        'element' => $Element,
    );
}

Есть предложения для этого?


0 ответов