Smarty 修饰符 - 将 url 变成链接

Posted

技术标签:

【中文标题】Smarty 修饰符 - 将 url 变成链接【英文标题】:Smarty Modifier - Turn urls into links 【发布时间】:2010-12-15 16:50:31 【问题描述】:

是否有一个 smarty 修饰符可以将锚标记添加到链接。 例如

$smarty->assign('mytext','This is my text with a http://www.link.com');

$mytext|link

将显示,

This is my text with a <a href='http://www.link.com'>http://www.link.com</a>

【问题讨论】:

【参考方案1】:

我创建了这个修饰符,看起来效果很好。我认为最大的改进可能是正则表达式。

<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage PluginsModifier
 */

/**
 * Smarty link_urls plugin 
 * 
 * Type:     modifier<br>
 * Name:     link_urls<br>
 * Purpose:  performs a regex and replaces any url's with links containing themselves as the text
 * This could be improved by using a better regex.
 * And maybe it would be better for usability if the http:// was cut off the front?
 * @author Andrew
 * @return string 
 */

function smarty_modifier_link_urls($string)

    $linkedString = preg_replace_callback("/\b(https?):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]*)\b/i",
                                create_function(
                                '$matches',
                                'return "<a href=\'".($matches[0])."\'>".($matches[0])."</a>";'
                                ),$string);

    return $linkedString;
 

?>

【讨论】:

你可以直接从preg_replace_callback函数返回值,这样可以省去你设置额外的变量。【参考方案2】:

试试这个解决方案,它适用于所有 URL(https、http 和 www)

$customer.description|regex_replace:" @((([[:alnum:]]+)://|www\.)([^[:space:]]*)([[:alnum:]#?/&=]))@":
 " <a href=\"\\1\" target=\"_blank\" >\\1</a>"

【讨论】:

【参考方案3】:

您也可以使用 Smarty 变量修饰符“regex_replace”:

$variable|regex_replace:"/\b((https?):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]*))\b/i":"<a href='$1' target='_blank'>$3</a>"

【讨论】:

【参考方案4】:

你必须写一个插件。

http://www.smarty.net/docsv2/en/

【讨论】:

以上是关于Smarty 修饰符 - 将 url 变成链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smarty 修饰符

如何在 Smarty 2x 中动态应用变量修饰符

Smarty:在修饰符中组合两个变量

如何在 Smarty 修饰符函数中分配新变量?

正则修饰符

[PHP] PHP7已经删除了preg_replace的e修饰符