Strpos не соответствует еврейской строке

1

Я пытаюсь найти, существует ли ивритская строка с использованием 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
}

Благодарю.

  • 1
    Означает ли "ничего не произошло", что код не выполнен или строка не найдена?
  • 0
    @kittykittybangbang строка не найдена
Показать ещё 4 комментария
Теги:
hebrew

3 ответа

1

Во-первых, по крайней мере, вам нужно написать свой 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

В противном случае существует два решения.

  1. Установите mb_internal_encoding и mb_strpos вместо strpos
  2. Преобразование содержимого hebrewtext.txt в UTF-8 с использованием mb_convert_encoding
  • 0
    ... не работал: \
  • 0
    Проверьте кодировку hebrewtext.txt и your_script.php . CP1255? Вы должны конвертировать их в UTF-8.
0

Используйте mb_strpos() и установите кодировку в UTF-8 с помощью mb_internal_encoding().

  • 0
    Можете ли вы показать пример? потому что я пытался, но, может быть, вы идея отличается
  • 0
    С UTF-8 вам не нужно использовать mb_strpos если вы просто сравниваете его с FALSE . UTF-8 - это код префикса .
0

В php строковые функции поддерживают только ASCII. Таким образом, вам нужно будет использовать другую функцию, которая называется mb_strpos (для многобайтовых strpos). Кроме того, поскольку вам приходится иметь дело с символами, отличными от ASCII, я бы рекомендовал заменить любые строковые функции, которые вы используете в своем коде, с эквивалентом в библиотеке строковых функций с несколькими байтами. (что является стандартным)

  • 0
    Я уверен, что «♦» не является ASCII (и тем не менее, strpos работает).
  • 0
    @Siguza заменил ссылку на ссылку, которая не включает расширенные коды ASCII
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню