• 01-07-2008, 04:52:50
    #1
    Merhaba,
    bir site içi arama yaptım. arama sonuçlarını büyük-küçük harfleri değiştirmeden koyulaştıramadım.
    örneğin
    $aranan="ista";
    $text="İstanbul'da hava kirliliği";
    echo eregi_replace($aranan,'<b>'.$aranan.'</b>',$text);
    // verdiği sonuç : "<b>ista</b>nbulda hava kirliği"
    // koyulaştırdı ama i küçüldü (doğal olarak)
    ereg_replace($aranan,'<b>'.$aranan.'</b>',$text);
    //eşleşme bulamıyor (doğal olarak)
    //istediğim şey bu iki stringi kullanıp şunu elde etmek
    "<b>İsta</B>nbul'da hava kirliliği"
    case-insensitive fonksiyonlarla replace yaptığımda $aranan neyse onu replace ediyor. case-sensitive'lerdeyse büyük küçük harf farkı olduğundan eşleştiremiyor.
    ereg_replace()
    eregi_replace()
    preg_replace()
    strstr()
    stristr()
    fonksiyonları istediğim sonucu vermiyor.
    Lütfen yardım. hiç böyle çaresiz kaldığımı hissetmemiştim.
  • 01-07-2008, 09:44:01
    #2
    php.nette az önce gördüğüm bir yorum;

    Alıntı
    Hello! I was founding a function, which finds any occurence of a string (no: first occurence). I wasn't, so I maked this function! It may be very useful.

    <?php

    int strnpos(string $haystack, mixed $needle, int $occurence);

    ?>

    Example:

    <?php

    strnpos("I like the bananas. You like coke. We like chocolate.", "like", 2); // 24

    ?>

    Here's code of this function:

    <?php

    function strnpos($base, $str, $n)
    {
    if ($n <= 0 || intval($n) != $n || substr_count($base, $str) < $n) return FALSE;

    $str = strval($str);
    $len = 0;

    for ($i=0 ; $i<$n-1 ; ++$i)
    {
    if ( strpos($base, $str) === FALSE ) return FALSE;

    $len += strlen( substr($base, 0, strpos($base, $str) + strlen($str)) );

    $base = substr($base, strpos($base, $str) + strlen($str) );
    }
    return strpos($base, $str) + $len;
    }

    ?>
    Kelimenin kaçıncı karaktere denk geldiğini tespit eden bir fonksiyon. Öncesine <b> ekleyip kelime uzunluğu kadar ileri gidip </b> ekleyebilirsin. Bu sorunun için çok uzun bir çözüm ama malesef case-sensitive olunca mesele biraz hatlar karışabiliyor. Başka çözüm bulan olursa bende merakla bekliyorum.