奇怪的PHP输出损坏

时间:2010-01-31 16:27:04

标签: php corruption

我的一个PHP网站上的输出损坏非常奇怪。有时,会显示一段HTML代码,而不是正在解释的标记。看起来有些字符丢失了,弄乱了标签。请参阅下面的示例:第二行应该是指向 c1 的链接,但由于某种原因会显示部分目标网址。

alt text http://trappist.elis.ugent.be/~wheirman/atuin/tmp/phpstrangeness.png

问题是暂时的,刷新通常会解决它。这可能发生在页面的不同部分(尽管通常在同一位置)。只有Safari似乎受到了影响(但我怀疑Firefox只是因为更宽容的解析而掩盖了这个问题)。它发生在我的开发服务器上作为实时服务器,它们都有略微不同的设置(输出缓冲,分块传输),尽管它发生的可能性似乎有所不同。

任何人都曾见过这样的事情吗?

修改

当我在此页面的Safari中“查看源代码”时,我会收到以下HTML:

<tr class="odd">
  <td>73</td>
  <td><a href="companies.php?view=1&amp;companyid=73&amp;return=%2Foffice%2Fcompanies.php">c1</a></td>
  <td></td>
  <td><img src='/images/dot_blue.png'  class="altTooltip" alt="inactive: no account"  /> </td>

我看不出有什么问题,所以当我要求源代码时,Safari已重新加载页面,或者我看起来不够努力......

3 个答案:

答案 0 :(得分:2)

嗯,这是我在黑暗中的镜头。

在fi字符组合之后,单词“office”中出现中断。我敢打赌,fi ligature - 不知何故 - 造成了麻烦。

到底是怎么回事?由于该HTML代码不包含连字字符,因此这可能是Safari中的一个错误。特别是因为它随机发生。您是否可以尝试重命名该文件,并查看问题是否消失?

拥有有效的HTML也可能有助于避免此问题,因为它使解析更容易。

答案 1 :(得分:1)

当您选择一段HTML并查看源代码时,您获得的不是100%的内容。例如,你们所有人都是&amp;,这可能意味着你选择了有问题的文本并查看了选择的来源。

如果您仍然遇到问题,请尝试查看整个源代码而不选择任何内容,然后使用ctrl + f查找代码中的位置,并尝试给我们一个更大的样本,而不仅仅是有问题的行,但是正确的行,并在更大的背景下。

例如,当使用表时,错误的<td>可能会产生非常奇怪的后果,这看起来不像那种类型的问题,我只是说我们需要上下文才能提供帮助。

还有一个问题是,为了查看源代码,某些浏览器实际上会重新提交页面并获得它的第二个副本。我觉得这是输出文本的代码,所以看看你是否正在使用像

这样的东西
<?= $someVar ?>

并确保它不是这样的:

<a href=<?= isset($x) ?'"'. $someVar.'"': '"'.$someOlderVar.'">'?>> xxx </a>

所以,请不要选择更大的样品。而且我们需要输出错误HTML的代码......

答案 2 :(得分:1)

我终于找到了问题(使用Web Inspector):TinyMCE一直在插入标签(它用于加载语言文件和扩展模块),在看似随机的地方里面我自己的HTML。结果是,在我的屏幕截图中可见的情况下,类似<a href="foo<script src="tinymce/lang/en.js">bar.php">foobar</a>

由于我也在同一页面上使用jQuery,我的猜测是它最终是由于jQuery对DOM的修改和TinyMCE的添加同时发生导致某种竞争条件(由一个bug造成的)只在Safari中出现。

我现在正在使用TinyMCE的jQuery构建,从那以后一直很好......

感谢大家的帮助!