PDA

Просмотр полной версии : Замена слов с http:// на ссылки


Ru}{eeZ
02.12.2008, 20:58
Заипалсо немного, вот что намутил:


$_POST['bodyUser'] = split(' ', $_POST['bodyUser']);
//var_dump($_POST['bodyUser']);
foreach($_POST['bodyUser'] as $oneBodyUser) {
if(strpos($oneBodyUser, 'http://')) $_POST['bodyUser'] .= ' '.str_replace($oneBodyUser, '<a href = "$oneBodyUser">$oneBodyUser</a>', $oneBodyUser);
$_POST['bodyUser'] .= ' '.$oneBodyUser;
}
var_dump($_POST['bodyUser']);

ещё пробовал закидывать в массив, потом имплоадить...

станд.: Чё я не так делаю? :(

Pashkela
02.12.2008, 21:10
$slovo='http://prekol111';
$slovo = explode('//', $slovo);
if ($slovo[0]=='http:' or $slovo[0]=='https:'){$res="<a href ='$slovo[0]//$slovo[1]'>$slovo[1]</a>";}
echo $res;

Gifts
02.12.2008, 21:10
Ru}{eeZ echo preg_replace('#(https?://[^ ]*)#i','<a href="\\1">\\1</a>',$_POST['bodyUser']); Не?

[dei]
02.12.2008, 21:15
Ru}{eeZ, учи регулярки.
http://phpclub.ru/detail/article/regexp_1
http://phpclub.ru/detail/article/regexp_2

Ru}{eeZ
02.12.2008, 21:36
Регулярки медленнее, не хотел их использовать, поэтому я хотел через строковые замутить

Gifts
02.12.2008, 21:50
Ru}{eeZ А циклы страшного вида, и explode - гораздо быстрее видимо

$in=array_fill(0,50,'http://yandex.ru')+array_fill(51,50,'просто текст')+array_fill(101,20,'<br>');
shuffle($in);
$a=implode(' ',$in);

$start=microtime(true);
$a1=preg_replace('#(http://[^ ]*)#i','<a href="\\1">\\1</a>',$a);
echo microtime(true)-$start;
$a=implode(' ',$in);
echo '<br />';
$start=microtime(true);
// А тут исправленный вариант того, что хотел ты
$a=split(' ', $a);
$a2='';
foreach($a as $oneBodyUser) {
if(strpos($oneBodyUser, 'http://')===false) {$a2 .= ' '.$oneBodyUser;} else
{$a2 .= " <a href ='$oneBodyUser'>$oneBodyUser</a>";}
}
echo microtime(true)-$start;
echo '<br><h3><font color="green">'.$a1.'</font></h3>';
echo '<br><h3><font color="red">'.$a2.'</font></h3>';
Это вам для сравнения. Все хорошо к месту - если требуется простая обработка - заменить одну букву на другую например - то строковые, а вот если эти строковые функции начнешь циклить и усложнять - то.... Разница - от 20 до 200 раз

З.Ы. у тя в коде была ошибка в цикле, ты одновременно перебирал массив $_POST['bodyUser'] и одновременно в цикле обращался к ней, как если это строковая переменная
З.Ы.Ы. Переделал пример для наглядности, и исправил ошибки в твоей версии - спасибо astrologer

astrologer
02.12.2008, 22:09
int strpos (http://php.net/strpos)( string $haystack , mixed $needle [, int $offset ]);

Warning

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans (http://ru2.php.net/manual/en/language.types.boolean.php) for more information. Use the === operator (http://ru2.php.net/manual/en/language.operators.comparison.php) for testing the return value of this function.