0

我刚刚偶然发现了一个有趣的错误......仍在试图弄清楚到底发生了什么。也许你可以帮忙。

首先,语境。我目前正在构建另一个人到 html 转换器(出于某些原因,我不会在这里激励,但我需要它)。

因此,请查看下面的屏幕截图(请参阅链接),更准确地说是在概述的位置。看?在上壳上,我有 < ; 和>,即转义的html。在下面的外壳上,我有 < 和 > 直接。

但是正如你所看到的(或者我真的需要镜子吗?),man 2 semget | webmanner两边的命令是一样的,就像which webmanner. 两者大致同时执行,中间没有对脚本进行任何修改。

[哎呀,还不能发图……链接来了]

http://aspyct.org/media/webmanner-bug.png

但是下面的外壳比较旧(大约 1 小时前打开)。较新的 shell 都打印出 < ;。所以我的第一个猜测是它以某种方式缓存了对文件的旧 inode 或旧块或其他内容的引用。

所以我在开始和结束时修改了部分脚本,以打印不同的消息。而且,令人惊讶的是,消息显示在两个终端上。但是, < ; 之间的差异仍然相同 和 <。

我很困惑......如何解释这种行为?我正在使用 OSX 10.8 (Mountain Lion)

编辑:好的,有一个很大的区别:下面的外壳使用 ruby​​ 1.9.3,而上面的是 1.8.7。两个版本之间的字符串处理是否有任何已知差异?

4

1 回答 1

1

你在使用 htmlentities 库吗?如果是这样,那么这个错误修复可能就是您所看到的

Ruby 1.9.3 与 1.9.2 的行为略有不同:即使只包含 ASCII 字符,编码的结果也不是 ASCII。这可能并不重要,但这种变化会使两个版本产生相同的结果。

https://github.com/threedaymonk/htmlentities/commit/46dafc959de03a02d0c1705bef7f1b157b350025

于 2012-09-01T20:50:45.607 回答