我有一个奇怪的PHP问题。PHP preg_replace浏览器和控制台不同的行为
我使用此代码读取HTML页面
$fh = fopen('html_page.htm', 'r+');
$html_page = '';
while (!feof($fh))
{
$html_page .= fread($fh, 1024);
}
fclose($fh);
而且在该网页中我有这样的事情:
<span> </span>
而且这样的:
<span> 324.85 SGD </span>
所以我想从所有的内容中去掉那些标签的内容,使第一个例子变成空字符串和第二例这样的:
324.85 SGD
我的解决办法是这样的:($ str变量保存标签的内容,只是内容没有标签)
$str = trim(preg_replace('/[^\w+ .,:;]/', ' ', $str));
当我通过浏览器加载我的脚本时,这很有效。 即使我得到这样的:
324.85 SGD // Inner extra spaces not removed
注:我的剧本被加载,而不是HTML页面,它仍然是读取槽FREAD()调用。
我在浏览器中显示输出(是的,我在看HTML源代码),它的表现很好。 但是,当我运行脚本槽控制台,它仍然以同样的方式读取相同的HTML页面,基本上所有的都一样,除了我保存输出到.txt文件或显示它在控制台我得到这个。
第一个例子与所有的& nbsp;
    Â
而第二与& NBSP混合值;
  324.85 SGDÂ
当我运行低谷的浏览器,因为在节目中,我检查空字符串值(第一个例子),它确实是空的第一个例子,这是不喜欢这些人物在那里,但不显示。
解决方案,我发现是这样的:
$str = trim(preg_replace('/[\x00-\x1F\x80-\xFF]/', ' ', $str));
作品在这两种情况下。 输出: 324.85 SGD
所以问题是,为什么PHP在这种情况下通过浏览器和控制台运行时表现如此不同?
什么是标准化字符串以消除多余的内部空间的最佳方式是什么?
从这:
324.85 SGD
这个
324.85 SGD
但是,当然,我想它的所有字符串的工作,无论他们是多么漫长。
谢谢。
我认为可能就是这样。当我在网页上打印时,我使用echo,当然在文件fwrite()中。所以它可能是fread()和HTML的字符编码。谢谢。 – 2014-10-28 05:17:36