如何防止 Drupal 7 将 & 转换为 &

How to prevent Drupal 7 from converting & to &

我正在像这样向搜索表单添加占位符:

$form['search_block_form']['#attributes']['placeholder'] = ' Search';

但问题是 drupal 将 & 符号打印为 & 所以在 HTML 输出中 对于占位符属性而不是:

placeholder=" Search"

我得到:

placeholder=" Search"

如何防止这种行为,或者是否有另一种方法可以通过字符的十六进制值来打印该字符?尝试使用:

[]decode_entities('') 以及其他一些功能,但其中 none 有帮助。

我认为您与 decode_entities() 很接近,但您可以尝试 PHP 函数 html_entity_decode()。

但是,除非您尝试将占位符添加到的字段称为 'search_block_form',否则我认为您的构造是错误的。

如果你这样做是 hook_form_alter()(如果你这样写,你应该这样做)并且你想要添加占位符的字段称为 "my_text_field",那么函数应该这样查找:

function custom_module_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'custom_form') {
    $form['my_text_field']['#attributes']['placeholder'] = html_entity_decode(' Search');
  }
}

请记住将 'custom_form' 替换为您表单的真实 ID,并将 'my_text_field' 替换为您要更改的字段名称。

/**** 编辑 ****/

终于明白你要干什么了。为了让这个在我的网站上工作,我必须像这样布置我的表单项目:

$form['test'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
      'placeholder' => html_entity_decode(''),
      'style' => array('font-family: Arial, FontAwesome;'),
    ),
);

重要的是要添加字体系列的样式属性,并确保它包含FontAwesome。 所以上面的例子将变成:

function custom_module_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'custom_form') {
    $form['my_text_field']['#attributes']['placeholder'] = html_entity_decode(' Search');
    $form['my_text_field']['#attributes']['style'] = 'font-family: Arial, FontAwesome;';
  }
}

不确定您是如何为 Font Awesome 添加 JS 的,但我使用 drupal_add_js() 在页面更改中添加了它,这样我就可以确保它只在需要的页面上加载。

让我知道你的结果如何,别忘了刷新你的缓存!