Strpos不匹配希伯来字符串

时间:2015-08-25 12:13:05

标签: php hebrew

我试图使用strpos查找希伯来字符串是否存在。我尝试mb_strpos,尝试了!strpos,甚至similar_text(),但没有任何效果。

有什么想法吗?

代码:

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

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

else {
 # Hebrew string exists
}

感谢。

3 个答案:

答案 0 :(得分:1)

首先,至少你必须在UTF-8中编写PHP代码。除ASCIIUTF-8外,PHP不完全支持。

如果您还在hebrewtext.txt中写了UTF-8,请使用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_encodingmb_strpos代替strpos
  2. 使用hebrewtext.txt
  3. UTF-8的内容转换为mb_convert_encoding

答案 1 :(得分:0)

在php中,字符串函数仅支持ASCII。因此,您需要使用另一个名为mb_strpos的函数(用于Multi Byte strpos)。此外,由于您必须处理非ASCII字符,因此我建议将您在代码中使用的任何字符串函数替换为多字节字符串函数library中的等效函数。 (这是标准的)

答案 2 :(得分:0)

使用mb_strpos()并使用mb_internal_encoding()将编码设置为UTF-8。