Ellrion
2/10/2016 - 2:59 PM

extended laravel escaping with exclusion some tags

extended laravel escaping with exclusion some tags

<?php

if (!function_exists('ex')) {
    /**
     * Escape HTML entities in a string with exclusion some tags.
     *
     * use in blade template `{!! ex($message, ['br', 'strong']) !!}`
     *
     * @param string $str
     * @param string[] $excluded
     * @return string
     */
    function ex($str, array $excluded)
    {
        $patterns = $tags = [];
        foreach ($excluded as $ex) {
            $allowed_tag_variants = [
                '<' . $ex . '>', //open tag or single tag variant
                '</' . $ex . '>', //close tag
                '<' . $ex . ' />', //single tag variant
                '<' . $ex . '/>', //single tag variant
            ];
            foreach ($allowed_tag_variants as $tag) {
                $patterns[] = '~' . preg_quote(e($tag), '~') . '~';
                $tags[] = $tag;
            }
        }

        return preg_replace($patterns, $tags, e($str));
    }
}