Em Dash处理php和rails之间的区别

Em Dash Handling difference between php and rails

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

在php中,我用

Opening Hours

显示
这呈现为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. a€" 12 a.m.

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

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


TL; DR-数据库数据编码为latin1,我的期望值是utf-8。使用此脚本进行转换->获利!

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

为了进行验证,我将php期望的编码手动设置为utf-8,然后,显示的外观与我的rails应用程序完全一样。但是,奇怪的是,反向没有用。当我将rails db编码设置为latin1时,字符更改了,但没有更改为正确的版本。无论那似乎是问题所在。

要将表和数据转换为utf-8,我首先尝试了如何将整个MySQL数据库字符集和排序规则转换为UTF-8?中介绍的解决方案。他们没有为我工作。前端没有变化。

最终,经过大量的故障排除和搜索之后,我遇到了这个脚本,它似乎可以满足我的需要。我在生产数据库的副本上运行了它,它起作用了!只是在那之后,我才通过它来了解它在做什么。.它基本上将数据转换为二进制,然后在仅更改表配置的基础上再次返回到新的编码(utf-8)。

通过此过程,我的旧数据得以完整保存,但是最近导入的一些新数据被破坏了,因为它们与我的原始情况相反。它们是通过Rails脚本(utf-8)导入到latin1数据库中的,这意味着它在rails中看起来不错,但在php中却弄乱了。但这是一个很小的情况,我只是清除了数据并再次导入了它。