【问题标题】:How insert raw HTML to label?如何将原始 HTML 插入标签?
【发布时间】:2013-05-12 20:41:09
【问题描述】:

是否有一些简单的方法可以将原始 HTML 标记添加到标签?我有这个:

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

它会产生:

<label class="input_tag" for="firstName">First Name &lt;em&gt;*&lt;/em&gt;</label>

BUT 标记 EM 未按应有的方式解释。我想要的是:

<label class="input_tag" for="firstName">First Name <em>*</em></label>

【问题讨论】:

  • 正确的 html 输出应该是什么?
  • 这是正确的 HTML 输入,但在站点附近输入是“名字 *”而不是“名字 *”
  • 请注意,生成的 HTML 实际上是实体编码的:&lt;label class="input_tag" for="firstName"&gt;First Name &amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&lt;/label&gt;,而不是完全如上所述。

标签: html laravel-4 label


【解决方案1】:

知道了,它使用了 e() 辅助函数,该函数使用 htmlentities() 来格式化您的标签,这会将您的标签转换为 &amp;amp;lt;em&amp;amp;gt;*&amp;amp;lt;/em&amp;amp;gt;

快速和(非常)肮脏的解决方法是在第一次调用 Helpers.php 之前将其添加到您的 start.php 或其他地方:

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

但这远非理想。

【讨论】:

    【解决方案2】:

    我经常将原始 html 用于表单输入和标签,因为我发现它更易于阅读和使用 html5 属性,例如 required 和 placeholder。这个表单是一个很好的例子,展示了如何将原始 html 与 Input::old 一起使用,它允许您捕获旧输入。 https://github.com/Zizaco/confide/blob/master/src/views/login.blade.php

    【讨论】:

      【解决方案3】:

      我相信 Form::label($name, $value, $attributes, $escape_html) 需要第四个参数来告诉它是否不转义 html。它默认为真。因此,如果您的预期结果是斜体 *,请将 false 作为第四个参数传递。

      【讨论】:

      • 查看Form::label的API文档可以看到没有第四个参数来转义html。 laravel.com/api/…
      【解决方案4】:

      你可以像这样创建一个辅助函数(宏):

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

      在你看来:

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

      【讨论】:

        【解决方案5】:

        对于必需的输入,我没有尝试将 HTML 添加到标签中,而是添加了一个类,'required-input'(或其他东西)。

        那么我有以下 CSS 规则

        label.required-input:before {
            content: ' * ';
            color: #f00;
        }
        

        除非您需要 * 用于屏幕阅读器,否则这将起作用。但是您仍然可以在输入中添加所需的标志。

        【讨论】:

          【解决方案6】:

          使用HTML::decode():

          {!! HTML::decode(Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag'))) !!}
          

          【讨论】:

          • 这在这个特定示例中可以使用,但请注意,生成的标签元素中可能存在您不想解码的其他实体。
          • 这就像一个魅力。您可能需要使用 {!! !!} 而不是 {{ }}。感谢您的提示!
          【解决方案7】:

          macro 中使用sprintf 比重新解码要快得多:

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

          【讨论】:

          • 如果你只需要一次并且想要一个快速简单的解决方案,你也可以内联,例如{{ sprintf(Form::label('tncs', '%s', array('class' =&gt; 'control-label tncs-label')), 'I agree with the &lt;a href="/terms"&gt;terms and conditions&lt;/a&gt;') }}
          • 是的,这可行,但即使是 1 次使用的解决方案,最好还是将其提取出来。它丑陋且难以理解。
          • 如果我想在多个视图中使用这个“小部件”,合适的位置在哪里?我宁愿只包含一次,而不是每次都需要它。
          • 我会把它放在你的 AppServiceProvider 的启动函数中。您需要引用完整的 FormFacade 而不是它的别名(例如 \Collective\Html\FormFacade:: 而不是 Form::
          猜你喜欢
          • 1970-01-01
          • 2019-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-13
          • 1970-01-01
          相关资源
          最近更新 更多