PHP-php在一个字符的随机位置中插入另一个字符串

发布于 2016-10-18 21:25:22 字数 246 浏览 1407 评论 3

我想实现这样的功能,在已有字符中插入内部链接,具体点说就是下面:

两个字符串分别为:$str1和$str2,是utf-8编码的,现在要把$str2插入到$str1的随机位置中,

$str1是带html标签的中英混合的字符串,要求$str2不能插入到$str1的html标签内,也不能插入到链接标签(a标签)封闭内。

不知道这样说,能不能理解,就是想在一段内容中随机插入几个链接文本

不知道怎么样才能实现这样的要求?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-08-19 22:18:08

可以用正则将可以插入字符串的部分用正则或字符串截取函数截取出来,再将要插入的字符串随机插入一个位置即可,最后再连接一下就可以了。

浮生未歇 2017-06-29 18:10:13

$str='打算的方式<a href="1.html">dffg</a>hyhyjhyjjya的风<p>asdasd</p>格的风格的风格的风格让他一人';
$link='<a href="#">内链</a>';//要插入的链接
preg_match_all("/(<a [^<>]*>.*</a>)|(<[^a><]+>)|(</[^a><]+>)/Uis",$str,$arr1);
$tmp = array_pad(array(), count($arr1[0]), 'yang@@@wo');
$str=str_replace($arr1[0],$tmp,$str);
$arr=explode('yang@@@wo',$str);
$rand=array_rand($arr);
$arr[$rand]=rand_in_str($arr[$rand],$link,'utf-8');
$str=implode('yang@@@wo',$arr);
$str=str_replace($tmp,$arr1[0],$str);
var_dump($str);

/**
* 向一个字符串随机插入一个字符串
* @param string $oldstr 老字符串
* @param string $instr 插入的字符串
* @param string $encoding 字符串编码
*/
function rand_in_str($oldstr,$instr,$encoding){
$len = mb_strlen($oldstr,$encoding);
$insert_point = mt_rand(1,$len-1);
$pre_str = mb_substr($oldstr,0,$insert_point,$encoding);
$after_str = mb_substr($oldstr,$insert_point,$len-$insert_point,$encoding);
$newstr = $pre_str.$instr.$after_str;
return $newstr;
}

虐人心 2017-06-04 12:07:18

这是刚才简单写了一个,你看看:

<?php
$str='字符串<a href="字g">dfg</a>aaaaaaaaaaaaaaaaaaaaaaaa啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊';
$strlen = mb_strlen($str,'utf8').'<br>';
$end = mt_rand(0,$strlen);
$rand_url_str = mb_substr($str,0,$end,'utf8')."<a href='#'>test</a>".mb_substr($str,$end,$strlen,'utf8');
//补充:
//下面就不写了,通过这个函数看看‘<’和‘>’出现的次数来确定需要过滤几个范围
substr_count($str, '<');
//在通过strpos对‘<’和‘>’的位置确定过滤范围,避免插入到其中
strpos($str,'<',$offet);//offet可以过滤已查找的范围

?>

后面你可以补充一下条件,我有事先下!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文