【问题标题】:What is `HtmlString` used for in Laravel?Laravel 中的 `HtmlString` 是做什么用的?
【发布时间】:2017-07-08 06:01:45
【问题描述】:

本课程:HtmlString

html = $html; } /** * 获取 HTML 字符串。 * * @return 字符串 */ 公共函数 toHtml() { 返回 $this->html; } /** * 获取 HTML 字符串。 * * @return 字符串 */ 公共函数 __toString() { 返回 $this->toHtml(); } }

使用:

 函数 csrf_field()
    {
        return new HtmlString('');
    }

它只是“构造”一个​​字符串并返回字符串本身!

谁能解释一下?非常感谢:)

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    由于它实现了一个接口 (Htmlable),因此其他方法可能会检查给定的字符串是否应被视为 HTML。

    用的不多,但比如Illuminate/Support/helpers.php:519

    if (! function_exists('e')) {
        /**
         * Escape HTML special characters in a string.
         *
         * @param  \Illuminate\Contracts\Support\Htmlable|string  $value
         * @return string
         */
        function e($value)
        {
            if ($value instanceof Htmlable) {
                return $value->toHtml();
            }
    
            return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false);
        }
    }
    

    这里可以看到如果$value附着Htmlable接口,就可以马上打印出来。否则,字符串以转义形式打印。

    【讨论】:

    • 是的,如果您实际编写 HTML(可能使用 Parsedown 或在数据库中存储实际 HTML),您可能会使用 HtmlString 的实例,您可以将字符串作为 HtmlString 而不是文本,它会跳过转义(基本上使用{{ $variable }} 而不是必须使用{!! $variable !!})。但是,您需要确保您可以信任文本的来源,这就是转义首先存在的原因。
    【解决方案2】:

    如果我理解得很好,你想在.blade.php 文件中使用它吗? 使用

    {{csrf_field()}}
    

    【讨论】:

    • 当然是像你说的那样使用XD,但是我很好奇它下面的HtmlString类,谢谢你的时间。
    • 请注意csrf_field() 如何返回HtmlString,因此在刀片中您可以使用{{ ... }} 而不是{!! ... !!} 进行打印。无需记住打印原始数据并确保它不会被转义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2023-04-03
    • 2014-03-04
    • 2012-05-19
    • 2011-10-25
    • 2015-07-17
    • 2014-02-26
    相关资源
    最近更新 更多