在我的表单类中,我添加了一个提交按钮:
$this->add([
'name' => 'submit',
'attributes' => [
'type' => 'submit',
'value' => 'Login ▹',
],
]);
输出结果为:
<input name="submit" type="submit" value="Login &#9657;">
如何阻止value
转义?
根据@RubenButurca的回答,这是输出:
答案 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="fa fa-caret-right"></i>">Login <i class="fa fa-caret-right"></i></button>
答案 1 :(得分:0)
如果我理解正确,你想要显示 登录▹
首先,您的结果表明您在代码中的某个位置使用其代码替换转义字符。
其次,在您找到用代码替换&
的代码之后,您可能必须编写&#34; Login &#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 ▹',
],
'options' => [
'disable_html_escape' => [
'value' => true,
],
],
]);
。
渲染输出为:
value