Замена слов с http:// на ссылки

Discussion in 'PHP' started by Ru}{eeZ, 2 Dec 2008.

  1. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    Заипалсо немного, вот что намутил:

    PHP:
        $_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']);
    ещё пробовал закидывать в массив, потом имплоадить...

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    $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;
     
    #2 Pashkela, 2 Dec 2008
    Last edited: 2 Dec 2008
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ru}{eeZ
    PHP:
    echo preg_replace('#(https?://[^ ]*)#i','<a href="\\1">\\1</a>',$_POST['bodyUser']);
    Не?
     
    _________________________
  4. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    Ru}{eeZ, учи регулярки.
    http://phpclub.ru/detail/article/regexp_1
    http://phpclub.ru/detail/article/regexp_2
     
  5. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    Регулярки медленнее, не хотел их использовать, поэтому я хотел через строковые замутить
     
    #5 Ru}{eeZ, 2 Dec 2008
    Last edited: 2 Dec 2008
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ru}{eeZ А циклы страшного вида, и explode - гораздо быстрее видимо

    PHP:
    $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
     
    _________________________
    #6 Gifts, 2 Dec 2008
    Last edited: 2 Dec 2008
  7. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    int 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 for more information. Use the === operator for testing the return value of this function.​