在 PHP 中自动将单词转换为 link

automatic convert word to link in PHP

如果不是 link!

,我想编写一个简单的代码,将特殊单词转换为特殊 link(用于 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> 不会改变。因为它是 link.

如何在 PHP 中完成?!用preg_replace?!怎么做?

谢谢。

很简单。

<?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?!

这段代码是关于:如果在某个短语中有一些 URL 它将转换为 link

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

为了更好地阐明问题:

我有一个带有一些标签的 HTML 代码。我想要其中的一些词,转换为一些 links。但如果是另一个 link 则不会转换。请参阅下面的高级示例,了解我们希望 link 编辑到 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没有改变,因为它是在另一个 <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];
    }