PHP preg_取代浏览器和控制台的不同行为
我有一个奇怪的PHP问题 我正在使用此代码阅读HTML页面PHP preg_取代浏览器和控制台的不同行为,php,html,regex,unicode,Php,Html,Regex,Unicode,我有一个奇怪的PHP问题 我正在使用此代码阅读HTML页面 $fh = fopen('html_page.htm', 'r+'); $html_page = ''; while (!feof($fh)) { $html_page .= fread($fh, 1024); } fclose($fh); 在这一页中,我有如下内容: <span> </span> &l
$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>
我的解决方案是:($str变量保存标记的内容,只是内容而不是标记)
当我通过浏览器加载我的脚本时,这很有效。
尽管我得到了这个:
324.85 SGD // Inner extra spaces not removed
注意:我的脚本是加载的,而不是HTML页面,它仍然是通过fread()调用读取的
我在浏览器中显示输出(是的,我正在查看HTML源代码),它运行良好。
然而,当我通过控制台运行脚本时,它仍然以相同的方式读取相同的HTML页面,基本上一切都是一样的,除了我将输出保存到.txt文件或在控制台中显示它之外,我得到了这个结果
第一个例子包括所有
    Â
第二,价值观与
  324.85 SGDÂ
这和我在浏览器中运行时没有显示的字符不同,因为在程序中我检查空字符串值(第一个示例),第一个示例中它实际上是空的
我找到的解决方案是:
$str = trim(preg_replace('/[\x00-\x1F\x80-\xFF]/', ' ', $str));
在这两种情况下都有效。
产出:
324.85新加坡元
所以问题是,在这种情况下,当通过浏览器和控制台运行时,为什么PHP的行为会如此不同
规范化字符串以移除额外内部空间的最佳方法是什么
由此:
324.85 SGD
对此
324.85 SGD
但我当然希望它能在所有的弦上工作,不管它们有多长
谢谢。这似乎与字符编码有关。我想确认你的HTML是UTF-8,而你的控制台不支持UTF-8或类似的东西 字符编码是处理字符时需要了解的一件非常重要的事情 我认为可以将输出更改为latin1,但这是一个相当疯狂的猜测: 因此,请尝试将utf8_decode()包装在您试图输出的内容周围 编辑:以上是我的第一个猜测,但在谷歌搜索了一下之后,我发现可能fread()是你的问题。请看: 和
我想可能就是这样。当我在网页上打印时,我使用了echo,当然还有fwrite()文件。所以它可能是HTML的fread()和字符编码。谢谢
324.85 SGD
324.85 SGD