Web/PHP

PHP) 그누보드에서 스마트에디터/ckeditor 에 링크를 입력할 경우 target 값 없이 입력이 될 경우

projin 2024. 2. 2. 12:22

그누보드에서 스마트에디터/ckeditor 에 링크를 입력할 경우 target 값 없이 입력이 될 경우

HTML을 파싱하여 href 속성이 있는 경우 등록된 본문 내용이 허용된 도메인과 다를 경우 target 속성 추가

 

<?php
$allow_domain = "https://mydomain.com";

$_POST['content'] = '<a href="https://blog.naver.com/">네이버 블로그 링크</a>';
$content = target_link($_POST['content']);


//결과
//<a href="https://blog.naver.com/ tatget="_blank">네이버 블로그 링크</a>

 
function target_link($content)
{
    // HTML을 파싱하여 href 속성이 있는 경우 target 속성 추가
    $dom = new DOMDocument();
    $content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');
    $dom->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $links = $dom->getElementsByTagName('a');

    foreach ($links as $link) {
        $href = $link->getAttribute('href');

        // href 속성이 있는 경우
        if (!empty($href)) {
            $parsedUrl = parse_url($href);

            // 도메인이 허용된 도메인과 다를 경우 target 속성 추가
            if (isset($parsedUrl['host']) && $parsedUrl['host'] !== $allow_domain) {
                $link->setAttribute('target', '_blank');
            }
        }
    }

    return $dom->saveHTML();
}

?>