Forms Cakephp表单标签编码Utf8

Forms Cakephp表单标签编码Utf8,forms,cakephp,utf-8,character-encoding,Forms,Cakephp,Utf 8,Character Encoding,在我的php应用程序中,从一开始我就使用utf8设置所有内容,以避免将来出现问题。我设置了我的数据库: class DATABASE_CONFIG { public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' =>

在我的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(); ?>
工作完美,而且‘ç’角色没有问题

但在形式上,比如:

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()


有什么提示吗?谢谢!

在视图中不需要使用
utf8\u encode()
。 您只是忘记了正确保存视图文件。 将其保存为“utf8无bom”,您将很好

不包含任何特殊utf8字符的文件仍然可以保留为ansi(因为它们之间没有区别)。 但是,每个确实包含这样一个字符的文件都需要另存为utf8(即使是控制器和模型,如果您计划在错误消息中使用utf8字符等)

PS:一般来说,使用英语并通过PO文件将其翻译成您的语言是比较明智的。 这样,您可以保持文件的原样,并且更加灵活(只需创建一个新的PO文件,您就可以动态添加新语言)

编辑 在一起确定输入()使用utf8字符后,我需要更新:

明智的做法是,在数据库字段(因此也包括输入字段)中使用“下划线\字段\名称”,并使用英语:

echo $this->Form->input("version"));
之后,您可以通过PO文件或指定标签轻松翻译它们:

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

但是建议使用第一种方法保持干燥。

App.encoding只是告诉Cake用UTF8发送数据。如果你使用的是MySQL,请确保数据库本身设置为UTF8\u general\u ci collation。

你好,Mark,它已经在UTF8中,没有bom,我在notepad++中转换了文件。小心:可能是出于意外,你将这些字符转换了两次?还有c检查通过Firefox和Firebug生成的html视图。它发送的内容类型是什么?可能您的apache设置会覆盖cake one并返回一个非ut8文件。这也会破坏输出。关于模型和控制器文件,我无法在没有bom的情况下将其转换为utf8。我使用记事本++执行此操作,但在关闭文件并重新键入后在记事本++上,在编码菜单上,它再次出现“Ansi”。关于结果html,我在标题部分有一行:但是,是的,在创建的表单中,它似乎是:这可能是问题吗?a)我已经告诉过你,转换没有任何utf8字符的文件是没有意义的(因为没有区别,它总是会再次回到ansi)b)标题比标记更重要。因此,正如我在前面的评论中指出的,您需要通过firebug检查标题。啊,当然是您!您使用的输入()错误。请参阅文档。第一个参数是数据库字段(只有小写和更好的ansi!):“first_name”等,如我前面提到的。始终使用英语并通过po文件进行翻译。简洁明了。
echo $this->Form->input("version", array('label' => 'Versão'));