【问题标题】:form textfield title in Drupal does not accept special caractersDrupal 中的表单文本字段标题不接受特殊字符
【发布时间】:2011-02-17 21:56:03
【问题描述】:

我正在尝试使用 form_alter 钩子为 drupal 表单的元素提供一个包含特殊字符(é、è、à ...)的标题

    $form['title'] = array(
          '#type' => 'textfield',
          '#title' => 'this is my title é à test',
          '#required' => TRUE
          ); 

在表单页面上给我一个空白输出

对标题使用 check_plain() 函数不会影响输出 :s ,仍然是空白 我虽然这是一个编码问题,但我检查了我所有的 enc 设置(数据库、服务器、主题模板)它们都设置为 utf-8

请注意,当输入包含特殊字符的值时,一切正常。 我认为这里的问题是关于 Drupal 核心在其#title 字段中不接受特殊字符?

【问题讨论】:

  • 你试过编码吗?即“这是我的标题 é à 测试”
  • 通过 t() 传递它有什么作用吗?
  • @ilia @bkildow:我尝试了这两种方法,但没有任何效果,我认为我正在创建的模块有问题,因为我尝试使用菜单挂钩测试测试页面的输出,如果页面包含一些特殊字符,则不显示!可能是模块需要指定它自己的编码?

标签: php html drupal forms hook


【解决方案1】:

嗯,首先,你应该在代码中使用英文,然后翻译它。

检查该文件的编码...

如果您在 drupal 之外尝试它,只是打印这些字符的普通 PHP 失败,它有效吗?

【讨论】:

  • 我正在创建的模块,必须是法语,无论如何我都试过这个代码:`header('Content-type: text/plain; charset=UTF-8');回声“你好éééééééé”; `这是我得到的:你好��������有8个空白字符:s,我猜这是因为错误的apache服务器配置?
  • 是的,但是你仍然应该在代码中用英文编写它然后翻译它,就像核心的其余部分一样。您可以提供带有模块翻译的 .po 文件。不,我认为这不是 Apache 的问题,而是您的编辑器/文件系统的问题。你在什么操作系统上?也许您的编辑器在保存时可以选择将其保存为 UTF-8。如果您有可用的 linux/unix 系统,请尝试“file yourfile.php”,然后打印编码。
  • 我在 windows xp sp3 上,数据的 ammout 不允许我用英语写然后翻译,当我尝试这段代码时,无论如何:header('Content-type: text/plain ; 字符集=ISO-8859-15');回声“helo éééééééé”;我得到了想要的输出!任何可能的方式来改变 Drupal 编码?
  • 没有。您不应该更改 Drupal 的编码,这会强制您使用 UTF-8。您需要更改文件的编码。请参阅stackoverflow.com/questions/1681568/… 了解一些方法。或者使用支持选择编码的编辑器/IDE。
【解决方案2】:

法语模块我也遇到了一些类似的问题。我同意 Berdir 的解决方案是推荐的解决方案,但如果您确实需要在代码中添加重音符号,则必须首先对文件进行编码。

在 Notepad++ 中,您可以通过 Encode 菜单来实现这一点,选择“Encode in UTF-8 (without BOM)”并检查文件的右下角以查看其格式,它应该说“ANSI 为 UTF-8”。

删除BOM 非常重要,因为它会“搞砸”Linux 服务器。

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多