【问题标题】:Non Latin Characters & ouch非拉丁字符和哎哟
【发布时间】:2011-05-10 09:41:13
【问题描述】:

我开始了解 Cake PHP,它发现了一个关于 PHP/MySQL 字符集方面的最佳实践的一般性问题,我希望可以在这里得到解答。

我的(练习)系统包含一个 mysql 电影表。此列表来自 Excel 表,该表导出为 CSV,并通过 phpMyAdmin 导入。

我注意到带有更多“异国情调”字形的标题在浏览器中呈现问题,例如 Amélie 中的 The é。使用 Cake 或普通 PHP,它呈现为 ?,除非通过 htmlentities 转换为 é。带有特殊字符的链接根本不会呈现。

如果我使用我的 Cake 输入表单输入 <alt>0233,这将在源代码中正确呈现,但通过 htmlentities 呈现为 é

在快速搜索后,我决定也许 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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。 MySQL 字符集和表设置为 UTF-8。我只能通过 PHP MyAdmin 访问数据库。文件导入设置为 UTF-8。导入文件是一列列表(即不是 SQL)。字符在 phpMyAdmin 客户端中显示为正确的字形(即浏览记录和查看 html 源代码)。考虑到限制,我还能尝试什么?
    【解决方案2】:

    这个问题经常出现。

    UTF8 应该可以工作。确保:

    1. 您的数据库排序规则使用 utf8(utf8 bin 通用)

    2. 你的html文档编码标签设置为utf8

    3. 非常重要 - 大多数人忘记了这一点 - 确保所有源文件都保存为 utf8。在 pc 上使用 notepad++ 或在 mac 上使用 Coda/TextMate/TextWrangler 以确保编码正确。如果你不这样做,可能会发生一些字符的转换/重新解释

    编辑:忘记 htmlentities,如果您始终使用 utf8 编码,则不需要它

    【讨论】:

    • 干杯。以上所有内容似乎都已到位(请参阅原始问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多