【问题标题】:automatic convert word to link in PHP在 PHP 中自动将单词转换为链接
【发布时间】:2016-02-01 07:33:14
【问题描述】:

如果不是链接,我想编写一个简单的代码,将特殊单词转换为特殊链接(用于 wiki 插件)!

例如,假设我们有一个文本"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?!怎么做?

谢谢。

【问题讨论】:

标签: php preg-replace href


【解决方案1】:

这很容易。

<?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 &lt;a href="#"&gt;are&lt;/a&gt; you?!

第二个函数输出:Hello! how &lt;a href="http://google.com"&gt;are&lt;/a&gt; you?!


替代方案:

如果您不想检测已关闭的&lt;a&gt; 标签,可以使用以下替代代码:

$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 &lt;a href="#"&gt;&lt;a href="http://google.com"&gt;are&lt;/a&gt; you?!

【讨论】:

  • 但是有一个问题,假设&lt;a href="lnk"&gt;Hello!&lt;/a&gt; How are you?!。对于这种情况不起作用。请注意,替换是“单词”,而是 HTML 代码。
  • @shozdeh 你是什么意思?
  • 见第三个答案。谢谢
  • @shozdeh 也许您可以自己尝试一下,因为您已经完成了 90% 的任务
  • 您不妨勾选一个最适合您的答案。
【解决方案2】:

这段代码是关于:如果在某个短语中有一些 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;
    }

【讨论】:

    【解决方案3】:

    为了更好地澄清问题:

    我有一个带有一些标签的 HTML 代码。我想要一些文字,转换成一些链接。但如果是另一个链接则不会转换。请参阅下面的高级示例,了解我们希望链接到 google 的特殊词 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 没有变化,因为它在另一个&lt;a&gt; 标记中。


    答案:

    由于这项工作有正则表达式的问题,这个问题可以在没有正则表达式的情况下解决。这里给出一个简单的解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多