Использование замены для замены содержимого

Имея следующий код в 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>

для отображения ссылок, я полностью потерян

0

Решение

Точно сказать не могу именно так что вы после, но кажется, что вам просто не нужны знаки фунта вокруг ваших #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>

Разве вам не удобнее делать все это в сценарии, а не в тегах? Похоже, немного меньше для вас.

1

Другие решения

Этот PHP-код заменит контент на HREF html только в случае строки http | https, я не могу помочь вам с Coldfusion. Но я уверен, что вы должны обнаружить строки, начинающиеся с протокола HTTP.

1

Вы можете многому научиться из очень похожих вопросов. Это может помочь вам: Оберните URL в строку тегами href, используя 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) в конце регулярного выражения в списке с разделителями. Вы можете добавить больше в этот список или удалить его.

Кроме того, «ряд» не имеет особого значения в холодном синтезе, я не уверен, что это имеет значение в php. Использование «строки» взаимозаменяемо с любым другим именем структуры. В этом случае вам нужно объявить его, прежде чем вы сможете назначить ему ключи («message» является ключом структуры «row»).

<cfset row = structNew()>

Будет идти до любого из приведенных выше вариантов кода.

0