laravel 4:如何将原始HTML插入标签?

laravel 4:如何将原始HTML插入标签?,html,label,laravel,Html,Label,Laravel,有什么简单的方法可以将原始HTML标记放到标签上吗?我有这个: {{ Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag')) }} {{Form::label('firstName','firstName*',array('class'=>'input_tag'))} 它产生: <label class="input_tag" for="firstNa

有什么简单的方法可以将原始HTML标记放到标签上吗?我有这个:

{{ Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag')) }}
{{Form::label('firstName','firstName*',array('class'=>'input_tag'))}
它产生:

<label class="input_tag" for="firstName">First Name &lt;em&gt;*&lt;/em&gt;</label>
名字em*/em
但是标记EM并没有被解释为它应该是的。我想要的是:

<label class="input_tag" for="firstName">First Name <em>*</em></label>
名字*
明白了,它正在使用e()helper函数,该函数使用htmlentities()格式化标签,这将标签转换为
&;书信电报;机电工程署;燃气轮机*&;lt/机电工程署;燃气轮机

快速且(非常)肮脏的修复方法是在第一次调用Helpers.php之前将其添加到start.php或其他位置:

function e($value) { return $value; }

但这远远不够理想。

我经常将原始html用于表单输入和标签,因为我发现阅读和使用html5属性(如required和placeholder)更容易。这个表单是一个很好的例子,说明了如何将原始html与Input::old一起使用,它允许您捕获旧的输入

我相信Form::label($name、$value、$attributes、$escape\u html)使用了第四个参数,它告诉表单是否要转义html。它默认为true。因此,如果您的预期结果是斜体*,请将false作为第四个参数传递

您可以创建一个助手函数(宏),如下所示:

HTML::macro('raw', function($htmlbuilder) {
   return htmlspecialchars_decode($htmlbuilder);
});
在你看来:

{{ HTML::raw(Form::label('input_firstname', 'Prénom <sup>*</sup>')) }}
{{HTML::raw(Form::label('input_firstname','Prénom*'))}

对于必需的输入,我没有尝试将HTML添加到标签中,而是添加了一个类“required input”(或其他内容)

然后我有下面的CSS规则

label.required-input:before {
    content: ' * ';
    color: #f00;
}
这将起作用,除非您需要为屏幕阅读器提供*。但是您仍然可以在输入上添加所需的标志。

使用HTML::decode()

{{HTML::decode(Form::label('firstName','firstName*',array('class'=>'input_tag')))}

宏中使用
sprintf
比重新编码快得多:

Form::macro('rawLabel', function($name, $value = null, $options = array())
{
    $label = Form::label($name, '%s', $options);

    return sprintf($label, $value);
});

正确的html输出应该是什么?这是正确的html输入,但在输入附近的站点是“名字*”而不是“名字*”注意,生成的html实际上是实体编码的:
First Name em*/em
,与上面所述不完全相同。查看API文档中的Form::label,我们可以看到,没有第四个参数可以转义html。这在这个特定的例子中是可行的,但是请注意,在生成的label元素中可能还有其他您不想解码的实体。您可能需要使用{!!!!}而不是{}。谢谢你的提示!如果您只需要这一次,并且您想要一个快速简单的解决方案,您也可以内联执行,例如,
{{sprintf(Form::label('tncs','%s',array('class'=>'control label tncs label')),“我同意'}}
是的,这会起作用,但即使对于1个使用解决方案的人来说,也最好将其提取出来。它很难看,也很难理解。如果我想在多个视图中使用它,这个“小部件”的合适位置在哪里?我希望只包含一次,而不是每次我需要它的时候。我会将它放在AppServiceProvider的引导功能中。您需要引用完整的FormFacade,而不是它的别名(例如
\Collective\Html\FormFacade::
而不是
表单::
Form::macro('rawLabel', function($name, $value = null, $options = array())
{
    $label = Form::label($name, '%s', $options);

    return sprintf($label, $value);
});