Laravel 中的 `HtmlString` 是做啥用的?

Posted

技术标签:

【中文标题】Laravel 中的 `HtmlString` 是做啥用的?【英文标题】: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('');
    

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

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

【问题讨论】:

【参考方案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,因此在刀片中您可以使用 ... 而不是!! ... !! 进行打印。无需记住打印原始数据并确保它不会被转义

以上是关于Laravel 中的 `HtmlString` 是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

帮助类续集

更新模型时使用 HtmlString 会引发 InvalidOperationException

将字符串中的HTML标签包含的内容移除

将字符串中的HTML标签包含的内容移除

iOS-UIWebView加载HTMLString图片显示超过屏幕宽度,导致webView可以左右滑动处的理方法

jQuery添加DOM元素