【问题标题】:PHP mb_strpos not recognizing copyright symbolPHP mb_strpos 不识别版权符号
【发布时间】:2015-12-15 21:26:52
【问题描述】:

我正在尝试使用 mb_strpos PHP 函数在某些网页上搜索 © 符号。

       $pagecontent = file_get_contents($website_url);

        if (mb_strpos($pagecontent, $string_to_find) === false) {

                // String / Content NOT found on page (FAIL)
                return false;

        } else {

                // String / Content FOUND on page (SUCCESS)
                return true;
        }

我会将 $website_url$string_to_find “版权©”变量传递给函数,但是它返回 false,即使我知道 © 存在于网页中。如果我从字符串中删除©字符,那么它返回true..所以我猜PHP试图找到©符号有问题?

谁能指出我正确的方向?

【问题讨论】:

  • 是显示版权符号的网站还是代表版权符号的html实体©?看源码就知道了。
  • 也有可能很多网站使用©而不是©
  • 也可能存在字符编码问题。
  • 嗨,它没有使用 ©源只是按原样显示符号。我的 php 脚本和网页本身都是 UTF8 编码的。

标签: php strpos mbstring


【解决方案1】:

由于您使用的是mb_strpos,我假设您使用mb_internal_encoding 设置编码?因为否则你可以使用strpos

那么,网站的编码是什么?你的“内部编码”是什么?我敢打赌他们不匹配。

例如如果网站是 UTF-8 编码的,你可以使用

mb_strpos($pagecontent, $string_to_find, 0, "utf-8")

此外,布尔值是值,因此您可以将代码简化为

$pagecontent = file_get_contents($website_url);
return (mb_strpos($pagecontent, $string_to_find) !== false);

完整的解决方案是:

$pagecontent = file_get_contents($website_url);
return (mb_strpos($pagecontent, $string_to_find, 0, "utf-8") !== false);

假设网站使用 UTF-8。此外,您必须确保 $string_to_find 具有相同的编码。如果将版权符号作为字符串文字放入代码中(如"©"),则源文件也应采用 UTF-8 编码。在 PHP 中,字符串在内部只是字节流。


其他可能性(我刚刚阅读了上面的 cmets):该网站包含一个 © HTML 实体。在这种情况下,您必须改为搜索 ©

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多