【问题标题】:Using replace to Replace Contents使用 replace 替换内容
【发布时间】:2014-10-07 18:46:14
【问题描述】:

在 PHP 中有以下代码

krsort($smileys);
                foreach($smileys as $k => $v){
                    $row['message'] = str_replace($k,'<img src="'.$v.'" />',$row['message']);
                }

            //place links if allowed
            if($display_links == 'yes'){
                preg_match('/(http:\/\/[^\s]+)/', $row['message'], $text);
                $hypertext = '<a href="' . $text[0] . '" target="_blank">' . $text[0] . '</a>';
                $row['message'] = preg_replace('/(http:\/\/[^\s]+)/', $hypertext, $row['message']);
            }

我在coldfusion中制作了一个复制品:

<cfset  structsort(smileys)>
<cfloop collection="#smileys#" item="k">
      <cfset row.message = replace(smileys[k],'<img src="smileys[k]">','all')>
</cfloop>

对于显示链接,我完全迷路了

【问题讨论】:

  • 请改用ReReplace,这样您就可以使用与PHP代码中相同的正则表达式。更多关于Regular expression syntax in ColdFusion
  • 我不知道替换应该做什么.. Replace() 作为Replace(string_to_search,string_to_search_for,string_to_replace_with,scope) 工作。您缺少一个参数,因为这只是说 search search_string for search_string 包裹在 标记中,它永远不会找到(您无法搜索“o”以获得“”)并替换它如果确实找到了,则使用“全部”

标签: php coldfusion


【解决方案1】:

不确定究竟你在追求什么,但似乎你只需要在#smileys[k]# 周围使用井号符号......所以......

<cfset  structsort(smileys)>
<cfloop collection="#smileys#" item="k">
      <cfset row.message = replace(smileys[k],'<img src="#smileys[k]#">','all')>
</cfloop>

或者...

<cfset  structsort(smileys)>
<cfloop collection="#smileys#" item="k">
      <cfset row.message = replace(smileys[k],'<img src=' + smileys[k] + '>','all')>
</cfloop>

在脚本而不是标签中做这一切你会不会觉得更舒服?对你来说似乎有点少了。

【讨论】:

  • 嗨,马克,脚本不是我的类型,我更倾向于在 cftags 中工作,感谢您提供的价值信息,我会尽快发布
【解决方案2】:

只有在 http|https 字符串的情况下,PHP 代码才会用 HREF html 替换内容,我无法帮助您进行冷融合。但我打赌你应该会发现以 http 协议开头的字符串。

【讨论】:

  • 投了赞成票,因为他的名声太低,无法进入 cmets。
  • 谢谢@dan-bracuk,同时我得到了另一个答案的积分
【解决方案3】:

您可以从非常相似的问题中学到很多东西。这可能对你有用:Wrap URL within a string with a href tags using Coldfusion

您可以将那里找到的正则表达式代码改编成

这是直译

<cfset  structsort(smileys)>
<cfloop collection="#smileys#" item="k">
    <cfset row.message = ReReplaceNoCase (smileys[k], "((http|https)://[a-z0-9\.\-_:~@##%&/?+=]+(.jpg|.gif|.png))", "<img src='\1'>", "all") />
</cfloop>

消息键的变体,命名为微笑键

<cfset  structsort(smileys)>
<cfset row.message = StructNew()>
<cfloop collection="#smileys#" item="k">
    <cfset row.message[k] = ReReplaceNoCase (smileys[k], "((http|https)://[a-z0-9\.\-_:~@##%&/?+=]+(.jpg|.gif|.png))", "<img src='\1'>", "all") />
</cfloop>

有了上面,每次你在这个循环之后调用#smileys[any_key]#,你也可以调用#row.message[any_key]#。如果您想保持数据协调,那就太好了。

带有返回消息列表的数组的变体

<cfset row.message = ArrayNew(1)>
<cfset  structsort(smileys)>
<cfloop collection="#smileys#" item="k">
    <cfset row.message[ArrayLen(row.message)] = ReReplaceNoCase(smileys[k], "((http|https)://[a-z0-9\.\-_:~@##%&/?+=]+(.jpg|.gif|.png))", "<img src='\1'>", "all") />
</cfloop>

通过以上方式,您可以遍历数组,或转换为列表以输出转换。

注意事项

在每个变体中,您会注意到(.jpg|.gif|.png) 在正则表达式末尾的管道分隔列表中。您可以在此列表中添加更多内容,也可以将其删除。

另外,'row'在冷聚变中没有特殊意义,我不确定它是否在php中。使用 'row' 可以与任何其他自定义结构名称互换。在这种情况下,您需要先声明它,然后才能为其分配键(“message”是结构“row”的键)。

<cfset row = structNew()>

将出现在上述任何代码变体之前。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 2017-09-28
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2016-04-19
    相关资源
    最近更新 更多