0

在我的 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()。

有什么提示吗?谢谢!

4

2 回答 2

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'));

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

于 2012-11-23T10:26:49.037 回答
0

App.encoding 只是告诉 Cake 以 UTF8 格式发送数据。如果您使用的是 MySQL,请确保将数据库本身设置为 utf8_general_ci 排序规则。

于 2012-11-25T07:47:36.027 回答