Меню Закрыть

Php strpos не работает с кириллицей

Содержание

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

mb_strpos — Find position of first occurrence of string in a string

Description

Finds position of the first occurrence of a string in a string .

Performs a multi-byte safe strpos() operation based on number of characters. The first character’s position is 0, the second character position is 1, and so on.

Parameters

The string being checked.

The string to find in haystack . In contrast with strpos() , numeric values are not applied as the ordinal value of a character.

The search offset. If it is not specified, 0 is used. A negative offset counts from the end of the string.

The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.

Return Values

Returns the numeric position of the first occurrence of needle in the haystack string . If needle is not found, it returns FALSE .

Changelog

Version Description
7.1.0 Support for negative offset s has been added.

See Also

  • mb_internal_encoding() — Set/Get internal character encoding
  • strpos() — Find the position of the first occurrence of a substring in a string

User Contributed Notes 3 notes

a sample mb_str_replace function:

function mb_str_replace($haystack, $search,$replace, $offset=0,$encoding=’auto’) <
$len_sch=mb_strlen($search,$encoding);
$len_rep=mb_strlen($replace,$encoding);

while (($offset=mb_strpos($haystack,$search,$offset,$encoding))!==false) <
$haystack=mb_substr($haystack,0,$offset,$encoding)
.$replace
.mb_substr($haystack,$offset+$len_sch,1000,$encoding);
$offset=$offset+$len_rep;
if ($offset>mb_strlen($haystack,$encoding))break;
>
return $haystack;
>

sorry, my previous post had an error. replace the 1000 with strlen($haystack) to handle strings longer than 1000 chars.

btw. This is an issue with the mbstring functions. you can’t specify the $encoding without specifying a $length, thus this reduces the functionality of mb_substr compared to substr

Иногда, при работе с текстов в PHP, приходится сталкиваться с «неверной» работой ряда функций:
strtolower и strtoupper – текст не меняет свой регистр.
substr – «промахивается при обрезании в два раза».
strpos и т.д. – возвращают неверный результат.
Все эти проблемы связаны с кодировкой текста!
Обычно из-за того, что функции применяются к строкам в UTF-8, а не в windows-1251 (CP1251).

  1. Использовать альтернативные функции для работы с Multibyte String. Все они начинаются с префикса mb_ : mb_strtolower, mb_substr, mb_strpos… но: для работы таких функций, на сервере требуется расширение php_mbstring
    &nbsp
  2. Правильно установить "родную" кодировку:
  1. Можно сначала переконвертировать строку в windows-1251, проделать нужные операции, а затем результат перевести в UTF-8
Читайте также:  3D ручка lix pen

Я пытаюсь использовать PHP-функцию mb_strpos для поиска символа © на определенных веб-страницах.

Я бы передал $ WEBSITE_URL а также $ string_to_find «Copyright ©» переменные для функции, однако она возвращает false, хотя я знаю, что © присутствует на веб-странице. Если я удаляю символ © из строки, то он возвращает true … так что я предполагаю, что есть проблема с PHP, пытающимся найти символы ©?

Может кто-то указать мне верное направление?

Решение

Так как вы используете mb_strpos Я полагаю, вы установили кодировку с mb_internal_encoding ? Потому что в противном случае вы могли бы просто использовать strpos ,

Итак, что такое кодировка сайта? А какая у вас «внутренняя кодировка»? Могу поспорить, они не совпадают.

Например. если сайт закодирован в UTF-8, вы можете использовать

Кроме того, логические значения являются значениями, поэтому вы можете упростить свой код до

Полное решение будет:

при условии, что сайт использует UTF-8. Кроме того, вы должны убедиться, что $ string_to_find имеет ту же кодировку. Если вы поместили символ авторского права в виде строкового литерала в свой код (как "©" ), ваши исходные файлы также должны быть в кодировке UTF-8. В PHP строки — это просто байтовые потоки внутри.

Другая возможность (я только что прочитал комментарии выше): веб-сайт содержит © HTML-сущность В этом случае вам придется искать © вместо.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.