PHP-php在一个字符的随机位置中插入另一个字符串
我想实现这样的功能,在已有字符中插入内部链接,具体点说就是下面:
两个字符串分别为:$str1和$str2,是utf-8编码的,现在要把$str2插入到$str1的随机位置中,
$str1是带html标签的中英混合的字符串,要求$str2不能插入到$str1的html标签内,也不能插入到链接标签(a标签)封闭内。
不知道这样说,能不能理解,就是想在一段内容中随机插入几个链接文本
不知道怎么样才能实现这样的要求?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可以用正则将可以插入字符串的部分用正则或字符串截取函数截取出来,再将要插入的字符串随机插入一个位置即可,最后再连接一下就可以了。
$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;
}
这是刚才简单写了一个,你看看:
<?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可以过滤已查找的范围
?>
后面你可以补充一下条件,我有事先下!