2016-07-29 37 views
1

我有一個二進制字的.doc,看起來像這樣的字符串格式:PHP的字符串編碼無法被strpos()識別?

þÿÿÿÿÿÿÿ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是一個更復雜的問題,但爲了我的目的,我感興趣的明文是二進制數據。有人對這個有經驗麼?

謝謝:)

+0

自編碼是utf8也許你想嘗試mb_strpos http://php.net/manual/en/function.mb-strpos.php –

+0

感謝您的快速響應,我提到我曾試過。絕對沒有返回。 – Anda

+0

您是否以'UTF-8'作爲參數嘗試過? –

回答

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; 
?> 

您可能希望在該$符號前加上反斜槓。

+0

感謝您的回答。我如何搜索「$」來刪除它或添加任何東西?如果我嘗試爆炸($二進制,「任何字符」),我只得到一個相同的長字符串數組。 – Anda

+0

將字符串放在單引號(')中,並且應該可以解決您的問題。 –

+0

從哪裏來,你如何閱讀這個字符串?如果你在你的php代碼中聲明瞭這個字符串,把這個字符串放在單引號(')中可以解決你的問題。 –

1

既然你串似乎二進制編碼,你只能在文字感興趣的一個快速的解決方案是使用filter_var搜索前清潔使用這種非ASCII可打印characters.Try字符串:

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