Я пытаюсь найти, существует ли ивритская строка с использованием strpos
. Я пробовал mb_strpos
и пытался !strpos
, даже similar_text()
но ничего не similar_text()
.
Есть идеи?
Код:
$data1 = file_get_contents('hebrewtext.txt');
$data2 = "אבגדהוזחטיכל";
if(strpos($data1, $data2) === FALSE) {
# Hebrew string does not exists
}
else {
# Hebrew string exists
}
Благодарю.
Во-первых, по крайней мере, вам нужно написать свой PHP-код в UTF-8
. PHP не поддерживает полностью ASCII
и UTF-8
.
Если вы также написали 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
В противном случае существует два решения.
mb_internal_encoding
и mb_strpos
вместо strpos
hebrewtext.txt
в UTF-8
с использованием mb_convert_encoding
hebrewtext.txt
и your_script.php
. CP1255? Вы должны конвертировать их в UTF-8.
Используйте mb_strpos() и установите кодировку в UTF-8 с помощью mb_internal_encoding().
mb_strpos
если вы просто сравниваете его с FALSE
. UTF-8 - это код префикса .
В php строковые функции поддерживают только ASCII. Таким образом, вам нужно будет использовать другую функцию, которая называется mb_strpos (для многобайтовых strpos). Кроме того, поскольку вам приходится иметь дело с символами, отличными от ASCII, я бы рекомендовал заменить любые строковые функции, которые вы используете в своем коде, с эквивалентом в библиотеке строковых функций с несколькими байтами. (что является стандартным)
strpos
работает).