2015-11-01 62 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

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; 
    }