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