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
相关产品推荐
相关产品推荐

