PHP mb_strpos无法识别版权符号

时间:2015-09-18 16:33:44

标签: php strpos mbstring

我正在尝试使用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 “Copyright©”变量传递给该函数但是它返回false,即使我知道网页中存在©。如果我从字符串中删除©字符,那么它返回true ..所以我猜测PHP有一个问题试图找到©符号?

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

由于您使用<?xml version='1.0' encoding='UTF-8' ?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ff6d7fe2" android:minHeight="?android:attr/actionBarSize" app:contentInsetEnd="0dp" app:contentInsetStart="0dp" > </android.support.v7.widget.Toolbar> . . . </RelativeLayout> ,我假设您使用mb_strpos设置编码?因为否则你可以使用mb_internal_encoding

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

E.g。如果网站采用UTF-8编码,您可以使用

strpos

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

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

完整的解决方案是:

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

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

其他可能性(我刚看过上面的评论):该网站包含一个"©" HTML实体。在这种情况下,您必须搜索&copy;