在 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];
}
如果不是 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];
}