如何在提交按钮值中不转义html实体?

时间:2017-02-14 15:56:46

标签: zend-framework2 zend-form-element zend-form2

在我的表单类中,我添加了一个提交按钮:

$this->add([
    'name' => 'submit',
    'attributes' => [
        'type' => 'submit',
        'value' => 'Login ▹',
    ],
]);

输出结果为:

<input name="submit" type="submit" value="Login &amp;#9657;">

Login button with html entity code

如何阻止value转义?

修改

根据@RubenButurca的回答,这是输出:

Login button with extra html entity code

3 个答案:

答案 0 :(得分:1)

我觉得奇怪的是我提交输入的价值。当我尝试<i class="fa fa-caret-right"></i>这样的值时,嗯,没有逃脱引号,我在输入元素中得到了随机属性。因此,我已经从输入字段换成了按钮。

$this->add([
    'name' => 'submit',
    'type' => 'button',
    'attributes' => [
        'type' => 'submit',
        'required' => 'required',
        'value' => 'Login <i class="fa fa-caret-right"></i>',
    ],
    'options' => [
        'label_options' => [
            'disable_html_escape' => true,
        ],
    ],
]);

ZendButon需要一个我不想要的标签。所以我扩展了视图助手,从元素值($buttonContent)中获取标签值。由于没有label属性,因此没有回显标签,但转义值仍显示在按钮标记中。

FormButton:

use Zend\Form\View\Helper\FormButton as ZendFormButton;
use Zend\Form\ElementInterface;

class FormButton extends ZendFormButton
{
    /**
     * Invoke helper as functor
     *
     * Proxies to {@link render()}.
     *
     * @param  ElementInterface|null $element
     * @param  null|string           $buttonContent
     * @return string|FormButton
     */
    public function __invoke(ElementInterface $element = null, $buttonContent = null)
    {
        if (!$element) {
            return $this;
        }

        // New code here
        if(is_null($buttonContent)) {
            $buttonContent = $element->getValue();
        }
        return $this->render($element, $buttonContent);
    }

}

输出:

<button type="submit" name="submit" value="Login <i class=&quot;fa fa-caret-right&quot;></i>">Login <i class="fa fa-caret-right"></i></button>

答案 1 :(得分:0)

如果我理解正确,你想要显示 登录▹

首先,您的结果表明您在代码中的某个位置使用其代码替换转义字符。 其次,在您找到用代码替换&的代码之后,您可能必须编写&#34; Login &#38;&#35;9657;&#34;为了获得&#34;登录&amp;#9657;&#34;在您的HTML代码中。

检查代码中是否有用转义代码替换特殊字符的函数。在不知道你的代码如何在浏览器中结束,代码调用它的代码等等的情况下很难搞清楚。

但是,我100%确定你有一个功能,它取值并用转义代码替换特殊字符 - 我在这里找到你的代码:http://www.w3schools.com/charsets/ref_utf_geometric.asp

答案 2 :(得分:0)

我不得不扩展--harmony视图助手:

FormSubmit

此代码将元素选项保存在受保护变量中,以便可以在use Zend\Form\ElementInterface; use Zend\Form\View\Helper\FormSubmit as ZendFormSubmit; class FormSubmit extends ZendFormSubmit { protected $_options; /** * Render a form <input> element from the provided $element * * @param ElementInterface $element * @throws Exception\DomainException * @return string */ public function render(ElementInterface $element) { $this->_options = $element->getOptions(); return parent::render($element); } /** * Create a string of all attribute/value pairs * * Escapes all attribute values * * @param array $attributes * @return string */ public function createAttributesString(array $attributes) { $attributes = $this->prepareAttributes($attributes); $escape = $this->getEscapeHtmlHelper(); $escapeAttr = $this->getEscapeHtmlAttrHelper(); $strings = []; foreach ($attributes as $key => $value) { $key = strtolower($key); if (!$value && isset($this->booleanAttributes[$key])) { // Skip boolean attributes that expect empty string as false value if ('' === $this->booleanAttributes[$key]['off']) { continue; } } //check if attribute is translatable if (isset($this->translatableAttributes[$key]) && !empty($value)) { if (($translator = $this->getTranslator()) !== null) { $value = $translator->translate($value, $this->getTranslatorTextDomain()); } } if(array_key_exists('disable_html_escape', $this->_options) && array_key_exists($key, $this->_options['disable_html_escape']) && $this->_options['disable_html_escape'][$key] === TRUE) { $strings[] = sprintf('%s="%s"', $escape($key), $value); continue; } //@TODO Escape event attributes like AbstractHtmlElement view helper does in htmlAttribs ?? $strings[] = sprintf('%s="%s"', $escape($key), $escapeAttr($value)); } return implode(' ', $strings); } } 函数中访问它。在此函数内,就在createAttributesString之前,我检查是否存在转义html选项,如果设置为@todo,则不要转义属性值。

使用是:

true

我正在使用一个数组,以便我可以选择不逃避哪个属性 - 在本例中为$this->add([ 'name' => 'submit', 'attributes' => [ 'type' => 'submit', 'value' => 'Login &#9657;', ], 'options' => [ 'disable_html_escape' => [ 'value' => true, ], ], ]);

渲染输出为:

value