PHP / ASCII严重令人难以置信的情况与不可打印的字符

时间:2013-03-10 22:37:04

标签: php html tags hex ascii

有人可以告诉我为什么这两个标签正在做不同的事情吗? (第一个字符串在上传到服务器时不起作用,第二个很好)

<a href="http://www.example.com">a</a>
<a href="http://www.example.com">a</a>

我运行转换为HEX值,似乎第一个字符串中至少有一个字符:

3c6120687265663d223f687474703a2f2f7777772e6578616d706c652e636f6d223e613c2f613e0d0a
3c6120687265663d22  687474703a2f2f7777772e6578616d706c652e636f6d223e613c2f613e

第二个字符串是手写的,首先由PHP函数生成:

<?php
$handle = @fopen("./data/test.txt", "r");
$homepage = trim(fgets($handle, 4096));
?>

<a href="<?php echo $homepage;?>">a</a>

在test.txt中,有:

http://www.example.com

在第一行,然后再写几行文字。

此外,隐形字符的代码似乎是3f,这是问号,应该是可见的,对吗?

1 个答案:

答案 0 :(得分:3)

文件中有BOMEF BB BF

正确的解决方案是修复将数据放入文件的算法(不放置BOM),或者如果文件是静态的 - 只需使用任何足够先进的文本编辑器将其删除一次(像Notepad ++那样),但作为一个快速而肮脏的解决方案,你可以在运行时删除它:

if (substr($homepage, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) {
    $homepage = substr($homepage, 3);
}