2011-05-10 113 views
2

我开始了解Cake PHP,它已经发现了关于PHP/MySQL字符集内容的最佳实践的一般问题,我希望能够在这里回答。非拉丁字符&ouch

我的(练习)系统包含一个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数据库为UTF-8 general_ci(从avalable一个受过教育的刺UTF-8选项)
  • 删除,重新导入我的数据

但是,我仍然卡住了。我注意到,当浏览记录时,phpMyAdmin设法在其HTML源代码中“正确”渲染字符。

我感觉到文档编码的过错,但是,我想知道,如果有人可以提供最好的答案:

  • 什么是从Excel移动我的数据到MySQL保存字形的最好方法?
  • 什么是适合我的桌子的最佳设置?
  • 我宁愿使用UTF-8本地显示喜欢é,我可以在Cake中做什么以避免调用类似于htmlentities的负载,即是否有配置设置或我设置的东西的方式使这更友好,并让像Html->link这样的蛋糕本地帮助者工作?

一些代码,以防万一:

电影节选控制器..

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; ?> 

预先感谢任何帮助/提示。

回答

3

确保在导入数据时将MySQL连接设置为UTF-8。排序规则仅用于排序和比较,而不用于保存数据。

您可以在SQL文件的开头使用SET NAMES 'utf-8';来设置连接的字符集。

+0

谢谢。 MySQL字符集和表被设置为UTF-8。我只有通过PHP MyAdmin访问数据库。文件导入设置为UTF-8。导入文件是一列列表(即不是SQL)。字符在phpMyAdmin客户端中显示为正确的字形(即浏览recs和查看html源文件)。还有什么我可以尝试,考虑到约束? – trickwallett 2011-05-10 10:19:33

1

这个问题经常来这里。

UTF8应该可以工作。确保:

  1. 你的数据库排序规则使用UTF-8(UTF8仓一般)

  2. 你的HTML文档的编码标记设置为UTF-8

  3. 也是非常重要的 - 大多数人都忘了一点 - 确保你所有的源文件都保存为utf8。在PC上使用记事本++或在Mac上使用Coda/TextMate/TextWrangler以确保编码正确。如果你不这样做,人物的一些改造/重新演绎可能发生

编辑:而忘记ヶ辆,如果你使用utf8编码都贯穿

你不需要它
+0

埃米尔的回答也很有用。 – Ben 2011-05-10 09:45:00

+0

干杯。以上所有东西似乎都已到位(请参阅原始问题)。 – trickwallett 2011-05-10 10:21:02