PHP 8.3.4 Released!

mb_strimwidth

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

mb_strimwidthDizgeyi belirtilen genişlikte kırpar

Açıklama

mb_strimwidth(
    string $dizge,
    int $başlangıç,
    int $genişlik,
    string $kırpıcı = "",
    ?string $kodlama = null
): string

Belirtilen dizge dizgesini genişlik ile belirtilen genişlikten kırpar. Burada yarım genişlikte karakterler 1, tam genişlikte karakterler 2 sayılır. Doğu Asya karakter genişlikleri ile ilgili ayrıntılar için bkz.» http://www.unicode.org/reports/tr11/

Bağımsız Değişkenler

dizge

Kırpılacak dizge.

başlangıç

Kırpma genişliğinin başlatılacağı konum. Dizgenin başından itibaren sayılır. İlk karakterin indisi 0'dır. Negatifse dizgenin sonundan itibaren karater sayısıdır.

genişlik

Kırpma genişliği. Negatifse dizgenin sonundan itibaren karater sayısıdır.

kırpıcı

Dizge kırpılırken dizgenin sonuna eklenen bir dizge.

kodlama

kodlama bağımsız değişkeninde karakter kodlaması belirtilir. Belirtilmediği takdirde veya null ise dahili karakter kodlaması kullanılır.

Dönen Değerler

Kırpılmış dizge ile döner. kırpıcı belirtilmişse, genişlikinci karakterin yerini alır.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0kodlama artık null olabiliyor.
7.1.0 başlangıçs ve genişlik artık negatif olabiliyor.

Örnekler

Örnek 1 - mb_strimwidth() örneği

<?php
$str
= mb_strimwidth($str, 0, 40, "..>");
echo
mb_strimwidth("Hello World", 0, 10, "...");
// output: "Hello W..."

?>

Ayrıca Bakınız

add a note

User Contributed Notes 2 notes

up
1
dregad at NOSPAM-mantisbt dot org
11 months ago
I see a lot of usage in the field where people rely on this function to truncate a string to a given length and append some chars at the end following example #1 in the above documentation.

While this works just fine with Western alphabets, it should be noted that a string's width is NOT necessarily the same as its length.

In Chinese, Japanese and Korean, some characters can be represented as full or half width, which may lead to unexpected results...

<?php
$str
= ['English' => 'Switzerland',
'Half width' => 'スイス',
'Full width' => 'スイス',
];
foreach (
$str as $w => $s) {
printf("%-10s: %s (bytes=%d chars=%d width=%d)\nSubstring : %s\nTrim width: %s\n\n",
$w, $s,
strlen($s), mb_strlen($s), mb_strwidth($s),
mb_substr($s, 0, 3),
mb_strimwidth($s, 0, 3)
);
}
/* Output
# With ASCII, chars == width, so everything works as expected
English : Switzerland (bytes=11 chars=11 width=11)
Substring : Swi
Trim width: Swi

# With half-width katakanas, it works too
Half width: スイス (bytes=9 chars=3 width=3)
Substring : スイス
Trim width: スイス

# Full-width katakanas are twice as wide, so we only get the 1st 'su' !
Full width: スイス (bytes=9 chars=3 width=6)
Substring : スイス
Trim width: ス
*/
>?
up
1
jamesgrimshaw2006 at gmail dot com
5 months ago
mb_strimwidth will only append "trim_marker" if the string is over the width.

*test code*
$HashTags = 'Results';
$socialmediatext = 'abcdefghijklmnopqrstuvwxyz';
for( $i=0; $i<=20; $i++ )
{
$socialmediatext .= '.';
$Twittext = mb_strimwidth($socialmediatext,0,35,$HashTags);
echo "<p>[".strlen($Twittext)."]$Twittext</p>";
}

*output*
[27]abcdefghijklmnopqrstuvwxyz.
[28]abcdefghijklmnopqrstuvwxyz..
[29]abcdefghijklmnopqrstuvwxyz...
[30]abcdefghijklmnopqrstuvwxyz....
[31]abcdefghijklmnopqrstuvwxyz.....
[32]abcdefghijklmnopqrstuvwxyz......
[33]abcdefghijklmnopqrstuvwxyz.......
[34]abcdefghijklmnopqrstuvwxyz........
[35]abcdefghijklmnopqrstuvwxyz.........
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
To Top