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

在Drupal 8中使用正则表达式修改表单标签

解决Drupal表单标签中括号内容添加<span>样式的问题

看起来你是想给Drupal表单标签里括号内的文本套上<span>标签来做样式,但写的预处理函数没起作用对吧?问题主要是你用preg_split拆分后没正确拼接回带标签的内容,而且代码也没写完。这里给你一个简洁可靠的实现方案:

function THEME_preprocess_form_element_label(&$variables) {
  $element = $variables['element'];
  
  // 确认标题存在且为字符串类型
  if (!empty($element['#title']) && is_string($element['#title'])) {
    $raw_title = $element['#title'];
    
    // 正则匹配括号内的内容,替换为带span标签的格式
    // 这里的类名可以根据你的需求修改,比如label-note
    $pattern = '/\((.*?)\)/';
    $replacement = '<span class="label-parenthetical">($1)</span>';
    
    // 先转义原始标题防止XSS,再执行替换
    $processed_title = preg_replace(
      $pattern,
      $replacement,
      \Drupal\Component\Utility\Html::escape($raw_title)
    );
    
    // 将处理后的标题标记为安全HTML,避免Drupal自动转义标签
    $variables['title'] = \Drupal\Core\Render\Markup::create($processed_title);
  }
}

关键细节说明:

  • 正则替换更高效:用preg_replace直接匹配替换,比拆分再拼接代码更简洁,也避免了拼接时的错误。
  • XSS安全防护:先用Html::escape转义原始标题,再执行替换,防止恶意内容注入。
  • 标记安全HTML:通过Markup::create()告诉Drupal这段内容是安全的HTML,这样模板渲染时不会把<span>转义成文本。
  • 缓存刷新:修改预处理函数后,一定要清空Drupal的缓存(比如用drush cr或者后台的性能设置),否则新代码不会生效!

最后,你可以给.label-parenthetical类添加自定义CSS样式,比如调整字体大小、颜色或者斜体:

.label-parenthetical {
  font-size: 0.9em;
  color: #666;
  font-style: italic;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:12:09