Em Dash 处理 php 和 rails 的区别

Posted

技术标签:

【中文标题】Em Dash 处理 php 和 rails 的区别【英文标题】:Em Dash Handling difference between php and rails 【发布时间】:2014-09-22 10:28:29 【问题描述】:

我正在将应用程序从 php 迁移到 rails,并且在显示 em-dash 时遇到了一些问题。 我正在显示一个字段,根据 phpmyadmin 和 rails 控制台,其值为“周一、周二和周四:上午 8 点 - 上午 12 点”。其中 – 应该是一个 em-dash(长破折号)。不知道为什么要以这种方式存储它。..

在 php 中,我用 <td><b>Opening Hours</b><br><?= nl2br($bar['opening_hours']) ?></td> 显示 这会呈现给Mon,Tue & Thu: 8 a.m. – 12 a.m.

在 Rails 中,我用苗条的= simple_format(@venue.opening_hours, style: "margin-bottom: 0px;") 显示这个。然而,这只是呈现给Mon,Tue & Thu: 8 a.m. – 12 a.m.

有谁知道为什么会发生这种情况以及 php 是如何克服它的?我在http://phpepl.cloudcontrolled.com/ 上尝试了echo nl2br("Mon,Tue & Thu: 8 a.m. – 12 a.m.");,它只是按原样打印出来......

编辑:输出到error_log 得到我Mon,Tue & Thu: 8 a.m. \xe2\x80\x93 12 a.m.

【问题讨论】:

得到â 等意味着您遇到了字符集问题。例如iso8859 在一个地方,utf-8 在另一个地方。您必须在整个系统中保持相同的字符集,或者将阶段与字符集转换逻辑挂钩。 @MarcB 我想到这可能是问题所在,但我不确定要深入挖掘..你有什么建议如何解决这个问题吗?它与***.com/questions/6769901/… 有关吗?我可以用***.com/questions/6115612/… 修复它吗? php代码似乎如何工作?据我所知,我的 php 代码库似乎在任何时候都没有指定数据库本身的编码。 @MarcB 关注***.com/questions/4773488/change-default-charset 我发现我的数据库正在使用latin1。将尝试在 dev 上将其转换为 utf8,看看效果如何。 我的php.ini;default_charset = "iso-8859-1"。莫非如果不指定,latin1 是默认的,所以它与数据库配合得很好? 如果 db 连接和/或 db 表设置为其他值,则 PHP 的设置无关紧要。 【参考方案1】:

TL;DR - db 数据编码是 latin1,我的 rails 需要 utf-8。使用this script 转换-> 获利!


长版: 在@MarcBs 发表评论后,我查看了我的phpmyadmin,并确认我的表格字符集确实设置为latin1,排序规则设置为latin1_swedish_ci。而且似乎 php 的 mysql 正在检测它,或者这是插件中的默认设置。

为了验证,我手动将php 预期的编码设置为utf-8,然后,显示看起来与我的rails 应用程序完全一样。然而,奇怪的是,反过来并没有奏效。当我将 rails db 编码设置为latin1 时,字符发生了变化,但不是正确的版本。不管这似乎是问题所在。

为了将表格和数据转换为utf-8,我首先尝试了How to convert an entire MySQL database characterset and collation to UTF-8? 提供的解决方案。他们没有为我工作。前端没有变化。

最后经过大量的故障排除和搜索,我遇到了this script,它似乎可以满足我的需求。我对生产数据库的副本运行它,它工作!直到在那之后,我才通过它了解它在做什么。它基本上将数据转换为二进制,然后在更改表配置的基础上再次转换为新的编码 (utf-8)。

通过这个过程,我的旧数据完好无损,但是我最近导入的一些新数据被破坏了,因为它们与我原来的情况相反。它们是由 rails 脚本 (utf-8) 导入到 latin1 数据库中的,这意味着它在 rails 中看起来不错,但在 php 中却很混乱。不过这是个小案例,我只是清空了数据再导入。

【讨论】:

以上是关于Em Dash 处理 php 和 rails 的区别的主要内容,如果未能解决你的问题,请参考以下文章

hashie / extensions / dash / indifferent_access(LoadError)导轨

如何在 freemarker 模板处理中转义 unicode 符号?

在 Ruby on Rails 中使用 Dash `-` 而不是下划线 `_` 的路由

钻取条形图 Dash plotly

在 Rails 中使用 em-websocket 构建对讲系统的策略?

在薄轨上安全地停止 em-websocket