2015-08-25 90 views
1

我在查找是否存在使用strpos的希伯來字符串。我試過mb_strpos,並試圖!strpos,甚至similar_text(),但沒有奏效。Strpos不匹配希伯來字符串

任何想法?

代碼:

$data1 = file_get_contents('hebrewtext.txt'); 
$data2 = "אבגדהוזחטיכל"; 

if(strpos($data1, $data2) === FALSE) { 
# Hebrew string does not exists 
} 

else { 
# Hebrew string exists 
} 

感謝。

+1

是否「什麼都沒有發生」意味着該代碼不執行,或者該字符串未找到? – kittykittybangbang

+0

@kittykittybangbang字符串未找到 – zimbabua

+1

您確定您的PHP文件和文本文件具有相同的編碼嗎? (不是一個是UTF-8,另一個是ISO-something。) – Siguza

回答

0

在php中,字符串函數只支持ASCII。因此,您需要使用另一個名爲mb_strpos的函數(用於多字節strpos)。此外,由於您必須處理非ASCII字符,因此我建議您將代碼中使用的任何字符串函數替換爲多字節字符串函數library中的等效字符串。 (這是標準的)

+0

[很確定「♦」不是ASCII](https://3v4l.org/F4aLr)(然而, 'strpos'工程)。 – Siguza

+0

@Siguza替換了一個不包含擴展ASCII碼的鏈接 – litelite

+0

[不是,它是一個多字節字符](https://3v4l.org/FL1NJ)。 – Siguza

0

使用mb_strpos()並將編碼設置爲帶有mb_internal_encoding()的UTF-8。

+0

你能舉個例子嗎?因爲我試過但也許你的想法不同 – zimbabua

+0

使用UTF-8,如果你只是將它與'FALSE'進行比較,你不必使用'mb_strpos'。 UTF-8是*前綴代碼*。 – mpyw

1

首先,至少您必須在UTF-8中編寫您的PHP代碼。除了ASCIIUTF-8之外,PHP不完全支持。

如果您還在UTF-8中寫了hebrewtext.txt,請使用strpos。儘管返回的偏移量是基於字節的而不是基於字符的,但如果僅將其與FALSE進行比較,則不會造成問題。

<?php 
$data1 = file_get_contents('hebrewtext.txt'); // This file is written in UTF-8 
$data2 = "אבגדהוזחטיכל"; // This code is written in UTF-8 
var_dump(strpos($data1, $data2) !== FALSE)); // Contains? -> It'll work 

否則,有兩種解決方案。

  1. 套裝mb_internal_encoding和使用hebrewtext.txtmb_strpos代替strpos
  2. 轉換內容納入UTF-8mb_convert_encoding
+0

...無效:\ – zimbabua

+0

檢查「hebrewtext.txt」和「your_script.php」的編碼。 CP1255?你應該將它們轉換成UTF-8。 – mpyw