编程Utf8的Cakephp表单标签

时间:2012-11-23 10:17:56

标签: forms cakephp utf-8 character-encoding

在我的php应用程序中,从一开始我用utf8设置所有内容以避免将来出现问题。我设置了我的数据库:

class DATABASE_CONFIG {

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'aquitex',
    'prefix' => '',
    'encoding' => 'utf8',
);

public $test = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'aquitex',
    'prefix' => '',
    'encoding' => 'utf8',
);

}

文件core.php:

Configure::write('App.encoding', 'UTF-8');

视图的默认布局:

<?php echo $this->Html->charset(); ?>

但是,我仍然在某些元素中遇到问题,例如表格标签。

在我的index.ctp文件中,这一行:

echo $this->Html->link("Segurança", array('controller' => 'Posts','action'=> 'add'), array( 'class' => 'button')); 

完美无缺,'ç'字符没有问题。

但是在形式上,像这样:

echo $this->Form->create('Post');
echo $this->Form->input('Nome Produto');
echo $this->Form->input(utf8_encode("Código Produto"));
echo $this->Form->input("Versão");
echo $this->Form->input('Data');
//echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('Criar Ficha');

我无法用“ó”或“ç”字符正确显示表单标签上的文字。正如你所看到的,我甚至在其中一个中尝试过utf8encode()。

任何提示?谢谢!

2 个答案:

答案 0 :(得分:1)

您无需在视图中使用utf8_encode()。 你只是忘了正确保存视图文件。 保存为“utf8 without bom”,你会没事的。

不包含任何特殊utf8字符的文件仍然可以作为ansi保留(因为它们之间没有区别)。 但是每个包含这样一个字符的文件都需要保存为utf8(如果你打算在那里使用utf8字符来获取错误信息等,甚至是控制器和模型)。

PS:一般来说,使用英语并通过PO文件将其翻译成您的语言更为明智。 通过这种方式,您可以按原样保留文件,并且更灵活(您可以通过创建新的PO文件来动态添加新语言)。

修改 在一起搞清楚你的​​输入()使用utf8字符后,我需要更新:

对你的数据库字段(以及你的输入字段)使用“underscore_field_names”是明智的 - 并且用英语:

echo $this->Form->input("version"));

您可以随后通过PO文件轻松翻译它们或指定标签:

echo $this->Form->input("version", array('label' => 'Versão'));

但建议第一种方法让它保持干燥。

答案 1 :(得分:0)

App.encoding告诉Cake以UTF8发送数据。如果您使用的是MySQL,请确保数据库本身设置为utf8_general_ci collat​​ion。