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

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>)

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

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


...全文
94 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
  • 打赏
  • 举报
回复
晕啦 我都结贴了哦 怎么老是回复这个的啊 ?
扩展功能: a. 首先满足网友的”口味”, 重新设计了所有旗子, 选择新的旗盘背景, 换了一个更清爽的面. (界面配色并不是件很容易的事情, 这样的棋类游戏长间容易使眼睛疲劳, 首先要做到选择的色彩 不刺激眼睛,其实大部分色彩都比较刺激眼睛,尤其是纯三基色(红/黄/蓝), 还要使界面做得漂亮). b. 增加”回放” 功能. 当下完旗子,可以重新回味一下, 刚杀完的一盘旗,可以寻找不足和重新感受 一下胜利的喜悦! 这个功能比较复杂! d. 又看了一下电脑走旗, 感觉确实比较难处理, 没有高人指点写这个算法确实比较难, 应该比以前聪明 了一些, 但是还是比较笨, 打算有空去找个现在的电脑走旗组件替换上, 自己的电脑走旗算法慢慢研 究(当是因为实在找不到现在的组件, 自己写了个较笨的,如果哪位朋友能够提供组件,在次深表感谢!!!). e. 扩展走旗的步数容量, 有些网友, 对战的都是高手, 产生数组越界, 这次从 200 扩展到了500, 当然 您还可以扩展到更大,因为源代码已经开放). f. 增加图像缓存功能. g. 解决 .net 从framework 1.0到framework 2.0升级出现的程式升级逻辑问题及一个小bug. h. 本来我只是想把这个程式放到Blog上, 供爱好c#的网友学习,一起交流一下, 没想到反应那么的强烈! 经常收到网友的反馈邮件, 从下载量看,不到一年仅从我的下载空间(不算网友转载下载次数)就有近 二万五千次. 所以又重新看懂已经基本忘记的代码,修复了bug,并扩展了以上功能. 有可能还会增加一些功能! 另外,在此对给我提交建议和bug的朋友表示感谢!!! (开发语言: C#语言) 来自:http://community.csdn.net/Expert/topic/5237/5237003.xml?temp=.4600031

21,890

社区成员

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

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