替换时的一些问题~请高手帮看看啊!~!

goldboy258 2008-06-26 07:21:37
目的:将$body中的word替换成 <a href="href">word</a>
1 数组$words $hrefs(元素相同)

2 数组中元素替换

3
usort($thearray, 'foo');

function foo($a, $b) {
if(strlen($a) == strlen($b)) return 0;
return strlen($a) < strlen($b) ? -1 : 1;
}

$string = str_replace('\"', '"', $body);
foreach($words as $k => $word){
$abc= '<a href="'.$hrefs[$k].'">'.$word.'</a>';

$string = preg_replace('/'.$word.'/', $abc, $string,3);

}//end foreach



问题出现了:(不知道还有什么意向不到的后果)
1.本来内容中带链接的 也会加上链接 变成了多个a标签套在一起(要能把被A标签包围的字符排除在外,不进行替换操作就好)
(内容<a href="csdn.html">CSDN程序</a>)会变成(内容<a href="a.html">CSDN<a href="code.html">程序</a></a>)

2.如果有重复的话也会多次替换,虽然排序了(从大到小)

3. 1中HTML是(<a href="csdn_code.html">CSDN程序</a>) 如果某个word是 csdn 的话,HTML中就会出现(<a href="<a href="csdn.html">csdn</a>_code.html">CSDN程序</a>)

怎样在替换中不出现这几个问题啊~正则真的头晕啊 郁闷

不知道还有没有其他问题 请高手帮忙啊!~~谢谢啦


...全文
90 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd5816690 2008-06-29
  • 打赏
  • 举报
回复
原来回过一个帖子,和LZ的问题差不多,奇怪的是连提问人名字也差不多
http://topic.csdn.net/u/20080612/09/7e7ef4d7-0e8f-4b54-a3a4-5c5717097a52.html

我原来的方法有缺点,
但根据 7楼 的想法,在我原来的方法上改进了一下:
在此谢谢7楼

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<script>
var keywords=[];//要替换的部分
var replaces=[];//替换成什么
var signs=[];//特定标记,不用管它

keywords[0]=/诺基亚/g;
keywords[1]=/Google/g;
keywords[2]=/头像/g;

replaces[0]="<a href=\"http://www.nokia.com\">诺基亚 </a>";
replaces[1]="<a href=\"http://www.g.cn\">G.cn </a>";
replaces[2]="<a href=\"/face/\">头像 <a>";

function convertSegment(contentValue){
//设置signs,并替换为signs
for(var i=0; (e = keywords[i]); i++){
signs[i] = "thePartWhichWillBeReplace"+i;
contentValue = contentValue.replace(keywords[i],signs[i]);
}

for(var i = 0; (e = signs[i]); i++){
while(contentValue.indexOf(signs[i]) >= 0){
contentValue = contentValue.replace(signs[i],replaces[i]);
}
}
return contentValue;
}

function convert(){
var content = document.getElementById("contentToConvert").innerHTML;
var arr = content.split("<");
content = "";
for(var i=0; i < arr.length ;i++){
if(!/^[aA] /.test(arr[i]) && arr[i].indexOf("img") != 0 && arr[i].indexOf("IMG") != 0){
arr[i] = convertSegment(arr[i]);
}
content += "<" + arr[i] + "\n";
}
alert(content.substring(1));
document.getElementById("contentToConvert").innerHTML = content.substring(1);
}
</script>

</HEAD>
<BODY onload="convert()">
<div id="contentToConvert">
<p>北京时间6月24日消息,据国外媒体报道, <a href="http://www.nokia.com" title="nokia">诺基亚 </a>将出资2.64亿欧元(约合4.1亿美元)收购智能手机操作系统Symbian剩余的52%股份,并将它完全置于一个诺基亚新成立的开源基金会的管理之下。著名博客作者达纳布兰肯霍恩(Dana Blankenhorn)今天撰文指出,这表明由Google(谷歌)倡导的Android手机平台已给市场带来了冲击。 </p>
<p>头像: <img src="http://profile.csdn.net/dada20042030/picture/2.jpg" alt="我的头像"/> </p>
</div>
</BODY>
</HTML>

ashchen 2008-06-29
  • 打赏
  • 举报
回复
正则切字符串成数组
遍历数组,<a <img 打头的跳过不替换
再合并
ashchen 2008-06-29
  • 打赏
  • 举报
回复
估计是想要php代码

想这样替换的一般是想seo优化,js替换不会有效果,搜索引擎不认js

1再具体一点:
切分用点是 <a></a>|<img>,正则自己想,函数用preg_split
goldboy258 2008-06-28
  • 打赏
  • 举报
回复
例子

内容:
<p>北京时间6月24日消息,据国外媒体报道,<a href="http://www.nokia.com" title="nokia">诺基亚</a>将出资2.64亿欧元(约合4.1亿美元)收购智能手机操作系统Symbian剩余的52%股份,并将它完全置于一个诺基亚新成立的开源基金会的管理之下。著名博客作者达纳布兰肯霍恩(Dana Blankenhorn)今天撰文指出,这表明由Google(谷歌)倡导的Android手机平台已给市场带来了冲击。</p>
<p>头像:<img src="http://profile.csdn.net/dada20042030/picture/2.jpg" alt="我的头像"/></p>

关键字:
1 诺基亚 -> <a href="http://www.nokia.com">诺基亚</a>
2 Google -> <a href="http://www.g.cn">G.cn</a>
3 头像 -> <a href="/face/">头像<a>

需要结果:
<p>北京时间6月24日消息,据国外媒体报道,<a href="http://www.a.com" title="nokia">诺基亚</a>将出资2.64亿欧元(约合4.1亿美元)收购智能手机操作系统Symbian剩余的52%股份,并将它完全置于一个<a href="http://www.nokia.com">诺基亚</a>新成立的开源基金会的管理之下。著名博客作者达纳布兰肯霍恩(Dana Blankenhorn)今天撰文指出,这表明由<a href="http://www.g.cn">G.cn</a>(<a href="www.Google.com">谷歌</a>)倡导的Android手机平台已给市场带来了冲击。</p>
<p><a href="/face/">头像<a>:<img src="http://profile.csdn.net/dada20042030/picture/2.jpg" alt="我的头像" title="我的头像" /></p>

我现在想要的就是
1.排除a标签内的内容替换
2 排除img标签内的替换
3 排除重复替换 比如 谷歌 和谷歌搜索 就只替换一个 这个好像可以排序解决~


剑心永远OK 2008-06-27
  • 打赏
  • 举报
回复
直接发个例子,然后说想要的结果。。
goldboy258 2008-06-26
  • 打赏
  • 举报
回复
怎么没高手经过这啊
goldboy258 2008-06-26
  • 打赏
  • 举报
回复
我一共才发4个帖子 老大~~
刚才把2个都结贴啦!~
goldboy258 2008-06-26
  • 打赏
  • 举报
回复
晕啦 我都结贴了哦 怎么老是回复这个的啊 ?

21,890

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧