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 `-` 而不是下划线 `_` 的路由