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