如何防止Drupal 7转换&到&

时间:2017-02-02 12:52:03

标签: drupal character-encoding drupal-7

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

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

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

placeholder=" Search"

我得到了:

placeholder=" Search"

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

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

1 个答案:

答案 0 :(得分:1)

我认为你接近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()的页面中添加了它,以便我可以确保它只在所需的页面上加载。

让我知道这对您有何影响,并且不要忘记刷新您的缓存!