PHP'de bir dizeyi belirli sayıda karaktere en yakın kelimeye nasıl kısaltırım?


183

Ben bir veritabanından bir metin bloğu çeker ve bir web sayfasındaki bir widget gönderir PHP yazılı bir kod parçacığı var. Orijinal metin bloğu uzun bir makale veya kısa bir cümle olabilir; ancak bu widget için, örneğin 200 karakterden fazlasını görüntüleyemiyorum. Metni 200 karakterde kesmek için substr () kullanabilirsiniz, ancak sonuç kelimelerin ortasında kesilecekti - gerçekten istediğim, 200 karakterden önce son sözcüğün sonunda metni kesmek .


2
Soru, kesilen metnin bir web sayfasındaki bazı sabit piksel sayılarına sığacağını söylemeyi amaçlamaktadır. Bu durumda, seçilen yazı tipine bağlı olarak karakter başına gereken alan sabit değildir. Dolayısıyla, 200 karakterin mevcut piksellere en uygun olacağını varsayamayız. Şimdiye kadar (02-Mar-2011'e kadar), aşağıdaki yanıtların tümü bu noktayı kaçırıyor ve bu nedenle hiçbiri güvenilir bir çözüm sunmuyor. - :(
LionHeart

1
Hayır, pek değil. Yazı tipini güvenilir bir şekilde ayarlayabilir ve en kötü durum senaryosunu, yani en geniş karakterlerden kaçının sığacağını ölçebilirsiniz. Ve tarayıcının nasıl oluşturduğundan% 100 emin olmanız gerekiyorsa, artık bir PHP sorunu değil.
Mołot

Bu Bağlantıyı Deneyin, Size
Yardımcı Olabilir

Yanıtlar:


221

Wordwrap işlevini kullanarak . Metinleri birden çok satıra böler, böylece maksimum genişlik belirttiğiniz genişliktir ve sözcük sınırlarını kırar. Bölme işleminden sonra, ilk satırı alırsınız:

substr($string, 0, strpos(wordwrap($string, $your_desired_width), "\n"));

Bu oneliner'ın işlemediği bir şey, metnin kendisinin istenen genişlikten daha kısa olduğu durumdur. Bu uç durumu ele almak için kişi şöyle bir şey yapmalıdır:

if (strlen($string) > $your_desired_width) 
{
    $string = wordwrap($string, $your_desired_width);
    $string = substr($string, 0, strpos($string, "\n"));
}

Yukarıdaki çözüm, gerçek kesme noktasından önce yeni bir satır içeriyorsa, metni erken kesme problemine sahiptir. İşte bu sorunu çözen bir sürüm:

function tokenTruncate($string, $your_desired_width) {
  $parts = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
  $parts_count = count($parts);

  $length = 0;
  $last_part = 0;
  for (; $last_part < $parts_count; ++$last_part) {
    $length += strlen($parts[$last_part]);
    if ($length > $your_desired_width) { break; }
  }

  return implode(array_slice($parts, 0, $last_part));
}

Ayrıca, uygulamayı test etmek için kullanılan PHPUnit test sınıfı:

class TokenTruncateTest extends PHPUnit_Framework_TestCase {
  public function testBasic() {
    $this->assertEquals("1 3 5 7 9 ",
      tokenTruncate("1 3 5 7 9 11 14", 10));
  }

  public function testEmptyString() {
    $this->assertEquals("",
      tokenTruncate("", 10));
  }

  public function testShortString() {
    $this->assertEquals("1 3",
      tokenTruncate("1 3", 10));
  }

  public function testStringTooLong() {
    $this->assertEquals("",
      tokenTruncate("toooooooooooolooooong", 10));
  }

  public function testContainingNewline() {
    $this->assertEquals("1 3\n5 7 9 ",
      tokenTruncate("1 3\n5 7 9 11 14", 10));
  }
}

DÜZENLE :

'À' gibi özel UTF8 karakterleri işlenmez. Bunu yapmak için REGEX'in sonuna 'u' ekleyin:

$parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);


1
Bu \n, istenen genişlikten önce bir metin varsa, metni erken kesecek gibi görünüyor .
Kendall Hopkins

@KendallHopkins: doğru, gerçekten bir sorun var. Cevabı, verilen sorunu çözen alternatif bir uygulamayla güncelledim.
Gray Panther

Bu örnek, paragraf etiketleri gibi html etiketleri içeren bir dize için işe yarar mı?
limitlessloop

Bana gerçekten yardımcı oldu, baş ağrım uzun Arabicharfler ve şimdi tokenTruncatefonksiyon yardımı ile kelimeleri düzeltmek için azaltılmış .. tnx bir milyon :)
Aditya P Bhatt

1
Neden eklemiyorsunuz: if (strlen ($ string) <= $ your_desired_width) $ string döndürür; ilk açıklama olarak?
Darko Romanov

139

Bu, kelimelerin ilk 200 karakterini döndürür:

preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, 201));

7
Neredeyse. Ne olursa olsun benim için cümlenin son kelimesini kaldırıyor gibi görünüyor.
ReX357

harika çalışıyor ama ReX357 ile aynı hatayı buldum. 1'den fazla kelime olduğunda, son kelimeyi siler.
Andres SK

25
Dizenin test ettiğinizden daha uzun olduğundan emin olmak için bir onay kutusuna sarın (kabul edilen cevapla aynı)if (strlen($string) > $your_desired_width) { preg_replace(...); }
Blair McMillan

Cevabı @BlairMcMillan tavsiyesini içerecek şekilde düzenledim
Kim Stacks

2
Normal ifade için küçük bir gelişme: parantezler final \ S + 'yı maç için isteğe bağlı yapar, ancak bu karakterleri de yakalarlar. Bu karakterleri yakalamamız gerekmediğinden, parantezleri böyle yakalamayın:/\s+?(?:\S+)?$/
pcronin

45
$WidgetText = substr($string, 0, strrpos(substr($string, 0, 200), ' '));

Ve orada var - maksimum dize uzunluğunun altında kalırken, herhangi bir dizgiyi en yakın tam kelimeye kısaltmanın güvenilir bir yöntemi.

Yukarıdaki diğer örnekleri denedim ve istenen sonuçları vermediler.


11
Verilen dizenin uzunluğu maksimum uzunluktan küçükse, bu son boşluğa kadar her şeyi keser. Bundan kaçınmak için, bunu bir ififadeye sarın :if (strlen($str) > 200) { ... }
Amal Murali

Basit ve muhtemelen diğer çözümlerden çok daha hızlı.
Vladan

1
Bununla ilgili bir sorun, dize boşluk içermiyorsa boş bir dize döndürmesidir.
orrd

Basitleştirilmiş:$WidgetText = substr($string, 0, strpos($string, ' ', 200));
wranvaud

37

Aşağıdaki çözüm, wordwrap işlevinin $ break parametresini fark ettiğimde doğdu :

dize wordwrap (dize $ str [, int $ width = 75 [, dize $ break = "\ n" [, bool $ cut = false]]])

İşte çözüm :

/**
 * Truncates the given string at the specified length.
 *
 * @param string $str The input string.
 * @param int $width The number of chars at which the string will be truncated.
 * @return string
 */
function truncate($str, $width) {
    return strtok(wordwrap($str, $width, "...\n"), "\n");
}

Örnek 1.

print truncate("This is very long string with many chars.", 25);

Yukarıdaki örnek çıktı verecektir:

This is very long string...

Örnek 2.

print truncate("This is short string.", 25);

Yukarıdaki örnek çıktı verecektir:

This is short string.

2
dize zaten yeni bir satır karakterine sahipse bu çalışmaz (örneğin description, bir blog yayınından bir tane çıkarmaya çalışıyorsanız )
supersan

1
@supersan preg_replace('/\s+/', ' ', $description)Tüm boşluk karakterlerini tek bir boşlukla değiştirmek için her zaman ön işlem yapabilir ;)
Mavelo

9

Çince ve Japonca gibi bazı dillerin kelimeleri bölmek için boşluk karakteri kullanmadığı herhangi bir yere "kelime" ile bölündüğünüzde unutmayın. Ayrıca, kötü niyetli bir kullanıcı herhangi bir boşluk bırakmadan veya standart boşluk karakterine benzer bir şekilde Unicode gibi bazı metinler girebilir; bu durumda kullandığınız herhangi bir çözüm yine de metnin tamamını görüntüleyebilir. Bunun bir yolu, dize uzunluğunu normal olarak boşluklara böldükten sonra kontrol etmek olabilir, o zaman dize hala anormal bir sınırın üzerindeyse - belki de bu durumda 225 karakter - devam edip bu sınırda aptalca böldüğünüz olabilir.

ASCII olmayan karakterler söz konusu olduğunda bunun gibi bir şey daha; bunları içeren dizeler PHP'nin standart strlen () yöntemi tarafından gerçekte olduğundan daha uzun olarak yorumlanabilir, çünkü tek bir karakter yalnızca bir yerine iki veya daha fazla bayt alabilir. Dizeleri ayırmak için strlen () / substr () işlevlerini kullanırsanız, bir karakterin ortasındaki bir dizeyi bölebilirsiniz! Şüphesiz, içinde ne zaman Yukarý () / mb_substr () biraz daha sağlam bulunmaktadır.


8

Strpos ve substr kullanın:

<?php

$longString = "I have a code snippet written in PHP that pulls a block of text.";
$truncated = substr($longString,0,strpos($longString,' ',30));

echo $truncated;

Bu, 30 karakterden sonra ilk boşlukta kesilmiş bir dize verecektir.


1
Merhaba, boşluk olmadan dize uzunluğu 30'dan az olacaksa, geri dönüş hatası olacaktır. ve burada sonuç 30 değil ilk 31 karakter olacak ..
Er. Anurag Jain

5

Hadi bakalım:

function neat_trim($str, $n, $delim='…') {
   $len = strlen($str);
   if ($len > $n) {
       preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches);
       return rtrim($matches[1]) . $delim;
   }
   else {
       return $str;
   }
}

Teşekkür ederim, sizin ihtiyacım için tüm bu cevapların en yararlı ve güvenilir işlevini buldum. Ancak, çok baytlık dizeleri desteklemesini nasıl sağlayabilirim?
ctrlbrk

5

@ Cd-MaN yaklaşımına dayanan fonksiyonum.

function shorten($string, $width) {
  if(strlen($string) > $width) {
    $string = wordwrap($string, $width);
    $string = substr($string, 0, strpos($string, "\n"));
  }

  return $string;
}

4
$shorttext = preg_replace('/^([\s\S]{1,200})[\s]+?[\s\S]+/', '$1', $fulltext);

Açıklama:

  • ^ - dizenin başından başlar
  • ([\s\S]{1,200}) - herhangi bir karakterin 1 ila 200'ünü al
  • [\s]+?- kısa metnin sonuna boşluk eklemeyin word ....word...
  • [\s\S]+ - diğer tüm içerikleri eşleştir

Testler:

  1. regex101.comorbirkaç tane daha ekleyelimr
  2. regex101.com orrrr tam 200 karakter.
  3. regex101.comsonra beşinci r orrrrrhariç.

Zevk almak.


PHP belgelerini anlamıyorum. i $1bir "değiştirme" olduğunu biliyorum , ama bu özel bağlamda ne atıfta bulunuyor? boş bir değişken?
oldboy

1
@ $1Parantez içine eşleştirmek için Anthony referansı ([\s\S]{1,200}). $2herhangi bir desen varsa iki ikinci parantez referans olacaktır.
hlcs

3

Bu soruna mükemmel bir çözüm bulmak ne kadar zor. Bu sayfada henüz en azından bazı durumlarda başarısız olmayan bir cevap bulamadım (özellikle dize satırları veya sekmeler içeriyorsa veya kelime sonu bir boşluktan başka bir şeyse veya dizede UTF varsa) 8 çok baytlı karakter).

İşte her durumda çalışan basit bir çözüm. Burada benzer cevaplar vardı, ancak "s" değiştiricisi çok satırlı girişle çalışmasını istiyorsanız önemlidir ve "u" değiştiricisi UTF-8 çok baytlı karakterleri doğru bir şekilde değerlendirmesini sağlar.

function wholeWordTruncate($s, $characterCount) 
{
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) return $match[0];
    return $s;
}

Bu olası bir kenar durumu ... Dizenin ilk $ characterCount karakterlerinde hiç boşluk yoksa, dizenin tamamını döndürür. Tercih ederseniz, bir kelime sınırı olmasa bile $ characterCount'ta bir mola zorlarsa, bunu kullanabilirsiniz:

function wholeWordTruncate($s, $characterCount) 
{
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) return $match[0];
    return mb_substr($return, 0, $characterCount);
}

Son bir seçenek, eğer dizeyi keserse üç nokta eklemesini istiyorsanız ...

function wholeWordTruncate($s, $characterCount, $addEllipsis = ' …') 
{
    $return = $s;
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) 
        $return = $match[0];
    else
        $return = mb_substr($return, 0, $characterCount);
    if (strlen($s) > strlen($return)) $return .= $addEllipsis;
    return $return;
}

2

İstediğiniz oldukça basit bir ifade olduğundan, bunu yapmak için preg_match işlevini kullanırsınız.

$matches = array();
$result = preg_match("/^(.{1,199})[\s]/i", $text, $matches);

İfade "boşluk ile biten 1-200 uzunluğunun başından başlayarak herhangi bir alt dizeyi eşleştir" anlamına gelir. Sonuç $ sonucudur ve maç $ karşılaşmalarıdır. Bu, özellikle herhangi bir alanla biten orijinal sorunuzla ilgilenir. Yeni satırlarda sona erdirmek istiyorsanız, normal ifadeyi şu şekilde değiştirin:

$result = preg_match("/^(.{1,199})[\n]/i", $text, $matches);

2

Tamam, yukarıdaki cevaplara dayanarak bunun başka bir versiyonunu aldım ama hesaba daha fazla şey alarak (utf-8, \ n ve & nbsp;), ayrıca wp ile birlikte kullanıldığında wordpress kısa kodlarını sıyrılan bir satır.

function neatest_trim($content, $chars) 
  if (strlen($content) > $chars) 
  {
    $content = str_replace('&nbsp;', ' ', $content);
    $content = str_replace("\n", '', $content);
    // use with wordpress    
    //$content = strip_tags(strip_shortcodes(trim($content)));
    $content = strip_tags(trim($content));
    $content = preg_replace('/\s+?(\S+)?$/', '', mb_substr($content, 0, $chars));

    $content = trim($content) . '...';
    return $content;
  }

2

Bu mattmac'ın cevabı için küçük bir düzeltme:

preg_replace('/\s+?(\S+)?$/', '', substr($string . ' ', 0, 201));

Tek fark $ dizesinin sonuna bir boşluk eklemektir. Bu, ReX357'nin yorumuna göre son kelimenin kesilmemesini sağlar.

Bunu yorum olarak eklemek için yeterli sayıda rep puanım yok.


2
/*
Cut the string without breaking any words, UTF-8 aware 
* param string $str The text string to split
* param integer $start The start position, defaults to 0
* param integer $words The number of words to extract, defaults to 15
*/
function wordCutString($str, $start = 0, $words = 15 ) {
    $arr = preg_split("/[\s]+/",  $str, $words+1);
    $arr = array_slice($arr, $start, $words);
    return join(' ', $arr);
}

Kullanımı:

$input = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna liqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.';
echo wordCutString($input, 0, 10); 

Bu ilk 10 kelimeyi verecektir.

preg_splitFonksiyon alt dizeleri içine bir dize bölmek için kullanılır. Dizenin bölüneceği sınırlar, normal ifadeler deseni kullanılarak belirtilir.

preg_split işlevi 4 parametre alır, ancak şu anda yalnızca ilk 3 tanesi bizimle ilgilidir.

İlk Parametre - Desen İlk parametre, dizenin bölüneceği normal ifadeler desenidir. Bizim durumumuzda, dizeyi sözcük sınırları arasında bölmek istiyoruz. Bu nedenle \sboşluk, sekme, satır başı ve satır besleme gibi boşluk karakterleriyle eşleşen önceden tanımlanmış bir karakter sınıfı kullanırız .

İkinci Parametre - Giriş Dizesi İkinci parametre, bölmek istediğimiz uzun metin dizesidir.

Üçüncü Parametre - Sınır Üçüncü parametre, döndürülmesi gereken alt dizelerin sayısını belirtir. Sınırı olarak ayarlarsanız n, preg_split bir n eleman dizisi döndürür. İlk n-1elemanlar alt dizeleri içerecektir. Son (n th)öğe dizenin geri kalanını içerecektir.


1

@Justin Poliey'in normal ifadesine dayanarak:

// Trim very long text to 120 characters. Add an ellipsis if the text is trimmed.
if(strlen($very_long_text) > 120) {
  $matches = array();
  preg_match("/^(.{1,120})[\s]/i", $very_long_text, $matches);
  $trimmed_text = $matches[0]. '...';
}

1

Neredeyse istediğinizi yapan bir fonksiyonum var, birkaç düzenleme yapacaksanız, tam olarak uyacak:

<?php
function stripByWords($string,$length,$delimiter = '<br>') {
    $words_array = explode(" ",$string);
    $strlen = 0;
    $return = '';
    foreach($words_array as $word) {
        $strlen += mb_strlen($word,'utf8');
        $return .= $word." ";
        if($strlen >= $length) {
            $strlen = 0;
            $return .= $delimiter;
        }
    }
    return $return;
}
?>

1

Ben böyle yaptım:

$string = "I appreciate your service & idea to provide the branded toys at a fair rent price. This is really a wonderful to watch the kid not just playing with variety of toys but learning faster compare to the other kids who are not using the BooksandBeyond service. We wish you all the best";

print_r(substr($string, 0, strpos(wordwrap($string, 250), "\n")));

0

Bunun eski olduğunu biliyorum, ama ...

function _truncate($str, $limit) {
    if(strlen($str) < $limit)
        return $str;
    $uid = uniqid();
    return array_shift(explode($uid, wordwrap($str, $limit, $uid)));
}

0

Substr'e daha çok benzeyen ve @Dave fikrini kullanarak bir işlev oluşturuyorum.

function substr_full_word($str, $start, $end){
    $pos_ini = ($start == 0) ? $start : stripos(substr($str, $start, $end), ' ') + $start;
    if(strlen($str) > $end){ $pos_end = strrpos(substr($str, 0, ($end + 1)), ' '); } // IF STRING SIZE IS LESSER THAN END
    if(empty($pos_end)){ $pos_end = $end; } // FALLBACK
    return substr($str, $pos_ini, $pos_end);
}

Ps .: Tam uzunlukta kesim substr.


0

Boşluksuz dizeleri işlemek için Dave ve AmalMurali koduna IF / ELSEIF ifadeleri eklendi

if ((strpos($string, ' ') !== false) && (strlen($string) > 200)) { 
    $WidgetText = substr($string, 0, strrpos(substr($string, 0, 200), ' ')); 
} 
elseif (strlen($string) > 200) {
    $WidgetText = substr($string, 0, 200);
}

0

Bu işleri buluyorum:

işlev abbreviate_string_to_whole_word ($ string, $ max_length, $ buffer) {

if (strlen($string)>$max_length) {
    $string_cropped=substr($string,0,$max_length-$buffer);
    $last_space=strrpos($string_cropped, " ");
    if ($last_space>0) {
        $string_cropped=substr($string_cropped,0,$last_space);
    }
    $abbreviated_string=$string_cropped."&nbsp;...";
}
else {
    $abbreviated_string=$string;
}

return $abbreviated_string;

}

Arabellek, döndürülen dizenin uzunluğunu ayarlamanızı sağlar.


0

Bunu kullan:

aşağıdaki kod ',' karakterini kaldıracaktır. Başka bir karakteriniz veya alt dizeniz varsa, bunu ',' yerine kullanabilirsiniz

substr($string, 0, strrpos(substr($string, 0, $comparingLength), ','))

// için başka bir dize hesabınız varsa

substr($string, 0, strrpos(substr($string, 0, $comparingLength-strlen($currentString)), ','))

0

Bu oldukça eski bir soru olsa da, PHP 4.3+ için belirtilmemiş ve geçerli olmadığı için bir alternatif sunacağımı düşündüm.

Hassasiyet değiştiriciyi sprintfkullanarak metni kısaltmak için işlev ailesini kullanabilirsiniz %.ℕs.

Bir nokta ve .ardından anlamı olan bir tamsayı belirleyiciye bağlıdır:

  • E, E, f ve F belirteçleri için: ondalık noktadan sonra yazdırılacak basamak sayısıdır (varsayılan olarak bu 6'dır).
  • G ve G belirteçleri için: bu, yazdırılacak maksimum anlamlı basamak sayısıdır.
  • S belirteci için: bir kesme noktası görevi görür ve dizeye maksimum karakter sınırı koyar

Basit Kesim https://3v4l.org/QJDJU

$string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var_dump(sprintf('%.10s', $string));

Sonuç

string(10) "0123456789"

Genişletilmiş Kesme https://3v4l.org/FCD21

Çünkü kelimeler sprintfbenzer substrve kısmen kelimeleri kesecek. Aşağıdaki yaklaşım, strpos(wordwrap(..., '[break]'), '[break]')özel bir sınırlayıcı ile sözcüklerin kesik olmamasını sağlayacaktır . Bu, pozisyonu almamızı ve standart cümle yapılarıyla eşleşmemizi sağlamamızı sağlar.

Bir dizeyi sözcükleri kısmen kesmeden ve belirtilen genişliği aşmayan, istenirse satır sonlarını koruyarak döndürme.

function truncate($string, $width, $on = '[break]') {
    if (strlen($string) > $width && false !== ($p = strpos(wordwrap($string, $width, $on), $on))) {
        $string = sprintf('%.'. $p . 's', $string);
    }
    return $string;
}
var_dump(truncate('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', 20));

var_dump(truncate("Lorem Ipsum is simply dummy text of the printing and typesetting industry.", 20));

var_dump(truncate("Lorem Ipsum\nis simply dummy text of the printing and typesetting industry.", 20));

Sonuç

/* 
string(36) "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"  
string(14) "Lorem Ipsum is" 
string(14) "Lorem Ipsum
is" 
*/

wordwrap($string, $width)Veya kullanarak sonuçlarstrtok(wordwrap($string, $width), "\n")

/*
string(14) "Lorem Ipsum is"
string(11) "Lorem Ipsum"
*/

-1

Bunu daha önce kullandım

<?php
    $your_desired_width = 200;
    $string = $var->content;
    if (strlen($string) > $your_desired_width) {
        $string = wordwrap($string, $your_desired_width);
        $string = substr($string, 0, strpos($string, "\n")) . " More...";
    }
    echo $string;
?>

-1

İşte bunu deneyebilirsiniz

substr( $str, 0, strpos($str, ' ', 200) ); 

Bu çözüm diğer cevaplarda zaten belirtilmişti. Sorun, dize 200 karakter uzunluğundan azsa veya boşluk içermiyorsa başarısız olur. Ayrıca, dizeyi 200 karakterle sınırlamaz, bunun yerine diziyi 200 karakterden sonra boşlukta keser , bu genellikle istediğiniz şey değildir.
orrd

-1

Bunun en kolay yolu olduğuna inanıyorum:

$lines = explode('♦♣♠',wordwrap($string, $length, '♦♣♠'));
$newstring = $lines[0] . ' &bull; &bull; &bull;';

Metni bölmek ve kesmek için özel karakterler kullanıyorum.


-2

Belki birisine yardımcı olabilir:

<?php

    $string = "Your line of text";
    $spl = preg_match("/([, \.\d\-''\"\"_()]*\w+[, \.\d\-''\"\"_()]*){50}/", $string, $matches);
    if (isset($matches[0])) {
        $matches[0] .= "...";
        echo "<br />" . $matches[0];
    } else {
        echo "<br />" . $string;
    }

?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.