2015-11-01 2 views
1

Я хочу написать простой код, который конвертирует специальные слова в специальную ссылку (для wiki-плагина), если это не ссылка!автоматическое преобразование слова в ссылку в PHP

Например предположим, что мы имеем текст "Hello! How are you?!" и
мы хотим преобразовать are в <a href="url">are</a>, но если мы имеем <a href="#"> Hello! How are you</a>?! или Hello! <a href="url">How are you?!</a> не меняется. Потому что это ссылка.

Как я могу это сделать в PHP ?! С preg_replace?! Как?

Спасибо.

ответ

0

для лучше уточнить проблему:

У меня есть HTML-код, который содержит несколько тегов. Я хочу, чтобы некоторые слова были переведены на некоторые ссылки. Но если это еще одна ссылка, она не конвертируется. Ниже расширенному например, для специального слова you, что мы хотим, связанного с Google:

This <a href="#">is a sample</a> text. Hello?! How are you?! <a href="#1">Are you ready</a>?!

следует преобразовать:

This <a href="#">is a sample</a> text. Hello?! How are <a href="http://www.google.com">you</a>?! <a href="#1">Are you ready</a> ?!

Примечание что первый you изменен, но второй you не был изменен, потому что он находится в другом <a> теге.


Ответ:

Из-за этой работы имеет проблемы с регулярным выражением, эта проблема может решить без регулярного выражения. Вот простое решение дается:

$data = 'Hello! This is a sample text.   <br/>'. 
    'Hello! This <a href="#1">is</a> a sample text. <br/>'. 
    'Hello! This <a href="#2">is a sample text.</a> <br/>'. 
    'Hello! <a href="#3">This is a sample</a> text. <br/>'. 
    '<a href="#4">Hello! This</a> is a sample text.'; 

    $from = " is "; 
    $to = '<a href="http://www.google.com" > '.$from.' </a>'; 

    echo $data; 
    $data = explode($from, $data); 
    echo "<br><br>"; 

    echo $data[0]; 
    $diff = 0; 
    for($i=1; $i<count($data); $i++){ 
     $n = substr_count($data[$i-1], '<a ') + substr_count($data[$i-1], '<A '); 
     $m = substr_count($data[$i-1], '</a>') + substr_count($data[$i-1], '</A>'); 

     $diff += $n-$m; 
     if($diff==0) 
      echo $to.$data[$i]; 
     else 
      echo $from.$data[$i]; 
    } 
2

Это легко.

<?php 

$string = "Hello! How <a href=\"#\">are</a> you?!"; 
$stringTwo = "Hello! how are you?!"; 

function turnTheWordIntoALink($string, $word, $link) { 
    if(isLink($string)) { 
     return $string; 
    } else { 
     $string = str_replace($word, "<a href=\"" . $link . "\">" . $word . "</a>", $string); 
     return $string; 
    } 
} 

function isLink($string) { 
    return preg_match("/(<a href=\".\">)/", $string); 
} 

echo turnTheWordIntoALink($string, 'are', 'http://google.com'); 
echo turnTheWordIntoALink($stringTwo, 'are', 'http://google.com'); 

Выход:

Первая функция выхода: Hello! How <a href="#">are</a> you?!

Вторая функция выхода: Hello! how <a href="http://google.com">are</a> you?!


Альтернатива:

Если вы хотите, чтобы не обнаружить <a> меток, которые были закрыты, вы можете использовать этот альтернативный код:

$stringThree = "Hello! how <a href=\"#\">are you?!"; 

function turnTheWordIntoALink($string, $word, $link) { 
    if(isLink($string)) { 
     return $string; 
    } else { 
     $string = str_replace($word, "<a href=\"" . $link . "\">" . $word . "</a>", $string); 
     return $string; 
    } 
} 

function isLink($string) { 
    return preg_match("/(<a href=\".\">)+(.)+(<\/a>)/", $string); 
} 

echo turnTheWordIntoALink($stringThree, 'are', 'http://google.com') . "\n"; 

Это дает выход: Hello! how <a href="#"><a href="http://google.com">are</a> you?!

+0

Thnaks. был полезен. – shozdeh

+0

Но есть проблема, Предположим 'Hello! Как вы?!'. Для этого сценария не работает. Обратите внимание, что замены - это слово, но в HTML-код. – shozdeh

+0

@shozdeh, что вы имеете в виду? –

0

этот код составляет примерно: если есть некоторые URL в какой-то фразы он будет преобразовать в ссылку

$word = 'hello how are you google.com, wish you good time'; 
$prg = "/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 
    if(preg_match($prg, $word, $url)) 
    { 
     echo preg_replace($prg, "<a href=http://$url[0]>{$url[0]}</a>", $word); 
    } 
    else 
    { 
     echo $word; 
    } 
Смежные вопросы