Текст с малки букви, с изключение на URL адреси

Имам страница с име "load.php", която се извиква в горната част на всяка страница. Има някои различни функции preg_replace() и функция strtolower(), която засяга променливата $text1 в края на страницата. (Тези промени се правят при зареждане на страницата, а не при вмъкване в db) Искам да добавя последна функция преди или след strtolower(), за да изключа href атрибута на URL адресите от strtolower(). Как мога да управлявам това? Благодаря.


person user4938    schedule 06.07.2011    source източник
comment
Можете ли да предоставите извадка от код? Не е ясно какво се опитвате да направите.   -  person Emyr    schedule 06.07.2011
comment
Да, искаме да видим източници (само няколко важни реда), за да разберем проблема. Мисля, че можете да проверите с regex дали вашият текст е URL или не и след това да използвате функцията си strtolower.   -  person Andron    schedule 06.07.2011


Отговори (2)


Нека да опитам:

//search for links with href
$links = preg_match_all('/href="/bg(?P<link>[^"]*?)"/i',$text1, $matches);
if(count($matches['link'])>0){
    // explode non links pieces of code
    $blocks = preg_split('/href="/bg(?P<link>[^"]*?)"/i',$text1);
    // for assurance
    // non-links pieces should be equal a links plus one
    if(count($matches['link']) == (count($blocks)-1))
    {
        // to lower non-link pieces
        $blocks = array_map("strtolower", $blocks);
        $size = count($matches['link']);
        for($i=0;$i<$size;$i++){
            //putting together the link again without change a case
            $blocks[$i] .= 'href="/bg'.$matches['link'][$i].'"';
        }
        $text1 = join("",$blocks);
    }
} else {
    $text1 = strtolower($text1);
}

На добър час :)

person Edinho Almeida    schedule 08.07.2011

Ето ви по-кратка версия:

function strtolowerExceptLinks($text) {
        $search = '(\b[a-zA-Z0-9]+://[^( |\>\n)]+\b)';
        preg_match_all($search, $text, $matches);
        $urls = array_unique($matches[0]);
        $text = mb_strtolower($text);
        if (is_array($urls)) {
            foreach ($urls as $url) {
                $text = str_replace(mb_strtolower($url), $url, $text);
            }
        }
        return $text;
    }
person Çağatay Gürtürk    schedule 08.01.2015