You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 8 buildForm提交按钮#value转义问题求助

解决Drupal 8表单提交按钮单引号转义问题

我之前也碰到过这个问题!Drupal的表单API会自动对普通字符串做HTML转义,所以直接写单引号或者手动转义都会被二次处理,导致显示出I don'这种转义后的实体字符。解决的关键是用Drupal提供的安全字符串类型来绕过自动转义,这里有两种靠谱的方法:

方法一:使用翻译函数(推荐,支持多语言)

Drupal的t()方法会返回TranslatableMarkup对象,这个对象会被表单渲染系统识别为安全的可翻译内容,不会进行额外转义,同时还能支持多语言适配,是最佳实践:

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this->t("I don't"),
  ];
  return $form;
}

方法二:直接创建安全标记(适合无需翻译的静态文本)

如果你不需要对按钮文本做翻译,可以用Markup::create()创建一个SafeString对象,明确告诉Drupal这个字符串是安全的,不需要转义:

use Drupal\Core\Render\Markup;

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => Markup::create("I don't"),
  ];
  return $form;
}

为什么之前的方法无效?

当你直接传入普通字符串(比如"I don't"或者'I don\'t')时,Drupal的表单渲染流程会自动对所有HTML特殊字符(包括单引号)进行转义,把'转换成';而如果你手动写了'I don'',Drupal会再次转义&,最终变成',显示出来还是不对。只有使用Drupal提供的安全字符串类型,才能跳过这个自动转义步骤。

内容的提问来源于stack exchange,提问作者Viet47

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:30:13