Özel karakterler tarafından PHP Sınırı dize çıktı

4 Cevap php

Ben PHP kullanarak bir dize döndürülen karakter sayısını sınırlamak için çalışıyorum.

Ben sunucu (yüksek yük / sonsuz döngü) çökmesine görünüyor bir çözüm uygulanan ettik, bu yüzden alternatif için soruyorum.

Ben dize keser ve karakter özel sayısını gösterir, ama yine de cümlenin anlamını saygılı bir çözüm bulmaya çalışıyorum, yani kelimenin ortasında bir kesim yapmaz

Aşağıdaki gibi benim işlevi çağrısıdır:

<?php
uc_textcut(get_the_title());
?>

Ve benim functions.php bu ben kullanılan (ve çöküyor) kodu:

function uc_textcut($var) {

     $position = 60;
     $result = substr($var,$position,1);

     if ($result !=" ") {
         while($result !=" ") {
            $i = 1;
            $position = $position+$i;
            $result = substr($var,$position,1);
         }
     }

     $result = substr($var,0,$position);
     echo $result;
     echo "...";

}

Benim sorunum $position = 60 ile.

Yüksek bu sayı, onu alır daha fazla yük - onun çok yavaş bir döngü yapıyor gibi.

Ben bir şey while() ile yanlış, ama ben kelimenin ortasında kesme değil, yine ziyaretçi tarafından hala anlaşılabilir tutmaya çalışıyorum düşünün.

Herhangi bir giriş?

:) Çok teşekkürler çocuklar

4 Cevap

Bu 60 karakter ya da başlangıç ​​koduna benzer fakat çok daha verimli 60 karakterden sonra ilk boşluk ya da kesilmiş olacaktır:

$position = 60;
if(substr($var,$position,1) == " ") $position = strpos($var," ",$position);

if($position == FALSE) $result = $var;
else $result = substr($var,0,$position);
$matches = array();
preg_match('/(^.{60,}?) /', $text, $matches);
print_r($matches[1]);

Sonra gerekirse elipsleri eklemek zorunda.

<?php

// same as phantombrain's but in a function
function uc_textcut($text) {
    $matches = array();
    preg_match('/(^.{60,}?) /', $text, $matches);
    if (isset($matches[1])) {
        echo $matches[1] . "...";
    } else {
        echo $text;
    }
}


// test it
$textLong = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempus dui non sapien ullamcorper vel tincidunt nisi cursus. Vestibulum ultrices pharetra justo id varius.';
$textShort = 'Lorem ipsum dolor sit amet.';

uc_textcut($textLong);
echo "\n";
uc_textcut($textShort);

>

Baskılar:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed...
Lorem ipsum dolor sit amet.