It appears that the $offset value is a character count not a byte count. (This may seem obvious but it isn't explicitly stated)
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_strpos — Bir dizgenin içinde başka bir dizgeye ilk rastlanılan noktanın indisini döndürür
Bir dizgenin içinde başka bir dizgeye ilk rastlanılan noktanın indisini döndürür.
Karakter sayısına dayalı olarak güvenilir bir çok baytlı
strpos() işlemi yürütür.
iğne
'nin ilk karakterinin yeri
samanlık
dizgesinin ilk karakterine göre hesaplanır.
İlk karakterin indisi 0'dır.
samanlık
İlk iğne
'nin aranacağı dizge.
iğne
samanlık
içinde ilki aranacak dizge.
strpos() işlevinden farklı olarak sayısal değerler
karakterin sıra değeri değildir.
başlangıç
samanlık
içinde aramanın başlatılacağı konum.
Belirtilmezse 0 kullanılır. Negatif değer dizgenin sonundan itibaren
sayılır.
kodlama
kodlama
bağımsız değişkeninde karakter kodlaması belirtilir. Belirtilmediği takdirde veya
null
ise dahili karakter
kodlaması kullanılır.
İlk iğne
'nin samanlık
içinde bulunduğu yerin indisi ile döner. Eğer
samanlık
içinde iğne
yoksa
false
döndürür.
Sürüm: | Açıklama |
---|---|
8.0.0 |
iğne artık boş dizge kabul ediyor.
|
8.0.0 | kodlama artık null
olabiliyor. |
7.1.0 |
başlangıç artık negatif olabiliyor.
|
It appears that the $offset value is a character count not a byte count. (This may seem obvious but it isn't explicitly stated)
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