【发布时间】:2011-05-10 09:41:13
【问题描述】:
我开始了解 Cake PHP,它发现了一个关于 PHP/MySQL 字符集方面的最佳实践的一般性问题,我希望可以在这里得到解答。
我的(练习)系统包含一个 mysql 电影表。此列表来自 Excel 表,该表导出为 CSV,并通过 phpMyAdmin 导入。
我注意到带有更多“异国情调”字形的标题在浏览器中呈现问题,例如 Amélie 中的 The é。使用 Cake 或普通 PHP,它呈现为 ?,除非通过 htmlentities 转换为 é。带有特殊字符的链接根本不会呈现。
如果我使用我的 Cake 输入表单输入 <alt>0233,这将在源代码中正确呈现,但通过 htmlentities 呈现为 &Atilde;&copy;。
在快速搜索后,我决定也许 UTF-8 可以解决问题,因此我
- 将 PHP 源代码和 CSV 文件编码更改为 UTF-8
- 确保
<meta>的东西在那里(它已经通过 Cake 的默认布局)。 - 确保我的浏览器认为文档是 UTF-8(他们确实如此)
- 将 MySQL DB 上的排序规则更改为 utf-8 general_ci(作为可用 UTF-8 选项的受过教育的尝试)
- 删除并重新导入我的数据
但是,我仍然卡住了。我注意到 phpMyAdmin 在浏览记录时设法在其 HTML 源代码中“正确”呈现字符。
我觉得应该归咎于文档编码,但是,我想知道是否有人可以提供最佳答案:
- 将数据从 Excel 移动到 MySQL 以保留字形的最佳方法是什么?
- 我的表的最佳设置是什么?
- 我更喜欢使用 UTF-8 来本地显示 é 之类的东西,我可以在 Cake 中做些什么来避免对 htmlentities 之类的东西进行大量调用,即是否有配置设置或我设置的东西让这更友好,并让像
Html->link这样的 Cake 原生助手工作?
一些代码,以防万一:
电影控制器摘录..
function index() {
$this->set('movies' , $this->Movie->find('all'));
}
index.ctp 查看摘录
<?php foreach ($movies as $movie): ?>
<tr>
<td><?php echo $movie['Movie']['id']; ?></td>
<td><?php echo htmlentities($movie['Movie']['title']); ?>
<td><?php echo $this->Html->link($movie['Movie']['title'] ,
array('controller' => 'movies' , 'action' => 'view' , $movie['Movie']['id'])); ?>
</td>
<td><?php echo $this->Html->link("Edit",
array('action' => 'edit' , $movie['Movie']['id'])); ?>
</td>
<td>
<?php echo $this->Html->link('Delete', array('action' => 'delete', $movie['Movie']['id']), null, 'Are you sure?')?>
</td>
</tr>
<?php endforeach; ?>
提前感谢任何帮助/提示。
【问题讨论】:
标签: php mysql cakephp utf-8 character-encoding