【问题标题】:Custom URL field in Joomla - Remove mailto prefixJoomla 中的自定义 URL 字段 - 删除 mailto 前缀
【发布时间】:2019-03-29 20:25:41
【问题描述】:

在 Joomla 中,我使用 URL 自定义字段(MAILTO 模式)来显示电子邮件地址。 问题是Joomla在代码中插入了两次mailto前缀:一次在href属性中,另一次在链接标签之间,像这样:

<span class="field-value"><a href="mailto:myEmail@some.site" rel="nofollow" target="_blank">mailto:myEmail@some.site</a></span>

...这是管理其显示的 php 代码:

defined('_JEXEC') or die;

$value = $field->value;

if ($value == '')
{
    return;
}

$attributes = '';

if (!JUri::isInternal($value))
{
    $attributes = ' rel="nofollow noopener noreferrer" target="_blank"';
}

echo sprintf('<a href="%s"%s>%s</a>',
    htmlspecialchars($value),
    $attributes,
    htmlspecialchars($value)
);

我想删除链接标签之间的 mailto 前缀。

如何进行? ......也许有一个正则表达式规则?问题,我不是开发人员……

感谢您的帮助,

洛伦佐

【问题讨论】:

    标签: php url joomla field mailto


    【解决方案1】:

    感谢您的回复,我想您可以再试一次。

    我的英文有点差,有些地方可能表达不清楚。 enter image description here

    echo sprintf('<a href="%s"%s>%s</a>',
    preg_replace("/(^(http|https|ftp):\/\/)|(^mailto:)/i","",htmlspecialchars($value)),
    $attributes,
    htmlspecialchars($value));
    
    
    // you can test it
    $value = "http://www.kinoki.at";
    $value = "mailto:info@kinoki.at";
    echo "<pre>";
    print_r( preg_replace("/(^(http|https|ftp):\/\/)|(^mailto:)/i","",htmlspecialchars($value)));
    echo "<pre>";exit;
    

    【讨论】:

    • 感谢您的回答,但它太笼统了。我在上面报告的 PHP 代码(在您回答之后)对于显示用于具有以下架构 http 的 URL 自定义字段的其他协议 (http:// https:// ftp:// ...) 也是有效的: // https://ftp://
    • 再次感谢您的回复,我现在正在出差,我明天晚上回办公室试试;)
    • ...测试了您的代码,但 mailto 前缀仍显示在链接标签之间:/
    • 您可以在 preg_replace 的 php 函数中添加模式。
    • 你好,我意识到这段代码只适用于 http 和 https 模式(未针对 ftp 测试),但不适用于 mailto 模式,奇怪......无论如何它不在 href必须删除 mailto 前缀的属性(您的代码在 href 属性中删除架构),但在 [] 标签之间,实际上在我的情况下 mailto 前缀它只是一个简单的文本...screenshot
    【解决方案2】:

    您可能会遇到这个问题,因为 Joomla 试图隐藏电子邮件地址。最好是使用推荐的显示电子邮件地址的方式,使用内置的电子邮件隐藏功能。

    echo JHtml::_('email.cloak', $value);
    

    另请参阅:https://docs.joomla.org/How_to_cloak_email_addresses

    【讨论】:

    • 您好 Jan,感谢您的回复,确实我认为这将是最好的解决方案,但由于我不是开发人员,也许您可​​以告诉我如何将它集成到代码中我在页面顶部举报了?
    • 把我给的代码代替echo sprintf('&lt;a href="%s"%s&gt;%s&lt;/a&gt;..... );。我对其进行了编辑,以使用您的电子邮件地址作为值。
    • 您也不需要引用$attributes 变量的行,因为它只需要建立一个链接。
    • 您好 Jan,感谢您的回复,我已将旧代码替换为您的 email address seems to be cloaked,但仍显示 mailto 前缀。在 Joomla 中,email custom field forces me to insert the mailto schema,也许这就是为什么总是显示前缀的原因?
    • 啊,是的,这将是您的问题,该扩展程序正在以错误的方式强制执行某些操作。联系扩展的作者寻求建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多