strpos()无法识别PHP字符串编码?

时间:2016-07-29 13:23:17

标签: php string character-encoding ms-word

我有一个二进制Word .doc,字符串格式如下所示:

þÿÿÿÿÿÿÿppp„±¶g œÙ Text in word doc here I'm interested in  [|`ñÿ|Standard1$S_HmHnHsHtHOJPJQJCJEH567>

当我回应那个字符串时,我可以看到我感兴趣的所有文字都在无法识别的字符之间找到(但那些我并不担心它们,因为我只想要文本)。问题是PHP似乎没有将它识别为字符串,因此我无法使用strpos(), strpos(), strchr(), mb_strpos()进行搜索,所有内容都不返回。没有-1,PHP错误日志中没有错误,只是没有。

然而,当我打电话给gettype()时,我得到了字符串。我怀疑这是一个编码问题,但mb_detect_encoding返回UTF-8。我尝试将其转换为多种不同的编码类型,但没有用。

如何让PHP搜索此字符串?我理解解析Word .doc是一个问题更复杂,但就我的目的而言,我感兴趣的明文是二进制数据。有没有人有这方面的经验?

谢谢:)

2 个答案:

答案 0 :(得分:1)

由于您的字符串似乎是二进制编码的,并且您只对文本感兴趣,因此快速解决方案是使用filter_var从非ascii可打印字符中清除字符串。在搜索之前尝试使用此字符串:

$clean_string = filter_var($str,FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH);

答案 1 :(得分:0)

注意零件“Standard1 $”。 php将$作为运算符而不是字符。 的 check here

<?php

$s = "þÿÿÿÿÿÿÿppp„±¶g œÙ Text in word doc here I'm interested in  [|`ñÿ|Standard1$S_HmHnHsHtHOJPJQJCJEH567>";

$s2 = strpos($s, "interested");
echo $s2;
?>

你可能想在$ sign之前加一个反斜杠。