в Joomla я использую настраиваемое поле URL (схема MAILTO) для отображения адреса электронной почты. Проблема в том, что Joomla дважды вставляет префикс mailto в код: один раз в атрибут href и еще один между тегами ссылок, например:
<span class = "field-value"><a href = "mailto:[email protected]" rel = "nofollow" target = "_blank">mailto:[email protected]</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 между тегами ссылок.
Как действовать? … Возможно, с правилом регулярного выражения? Проблема, я не разработчик ...
Спасибо за помощь,
Лоренцо






Спасибо за ответ, я думаю, вы можете попробовать еще раз.
Я немного плохо говорю по-английски, местами может быть непонятное выражение. введите описание изображения здесь
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:[email protected]";
echo "<pre>";
print_r( preg_replace("/(^(http|https|ftp)://)|(^mailto:)/i","",htmlspecialchars($value)));
echo "<pre>";exit;
еще раз спасибо за ответ, я сейчас в поездке, попробую завтра вечером, когда вернусь в офис;)
... протестировал ваш код, но префикс mailto все еще отображается между тегами ссылок: /
вы можете добавлять схемы в функцию php, которая является preg_replace.
И снова здравствуйте, я понял, что этот фрагмент кода работает только для схемы http и https (не тестировался для ftp), но не для схемы mailto, странно ... В любом случае префикс mailto должен быть удален не в атрибуте href ( ваш код удаляет схему в атрибуте href), но между тегами [<a>], действительно, в моем случае префикс mailto это просто простой текст ... Скриншот
Привет и еще раз спасибо за ответ :) Нет проблем с вашим английским, мой не лучше ... но какую часть кода я должен взять? первое или второе решение? В любом случае, я думаю, что решение Яна, возможно, является лучшим решением для подражания, поскольку оно рекомендовано документацией Joomla.
... и это встроенная функция скрытия электронной почты Joomla. ;)
Вы, вероятно, столкнетесь с этой проблемой, потому что Joomla пытается скрыть адрес электронной почты. Лучше всего использовать рекомендуемый способ отображения адреса электронной почты, используя встроенные функции маскировки электронной почты.
echo JHtml::_('email.cloak', $value);
См. Также: https://docs.joomla.org/How_to_cloak_email_addresses
Здравствуйте, Ян, и спасибо за ваш ответ, действительно, я думаю, что это было бы лучшим решением для подражания, но, поскольку я не разработчик, возможно, вы могли бы рассказать мне, как интегрировать его в код, который я сообщил в верхней части страницы. ?
Вместо части echo sprintf('<a href = "%s"%s>%s</a>..... ); поставил код, который я дал. Я отредактировал его, чтобы использовать в качестве значения ваш адрес электронной почты.
Вам также не нужны строки, ссылающиеся на переменную $attributes, поскольку они нужны только для создания ссылки.
Здравствуйте, Ян, и спасибо за ваш ответ, я заменил старый код на ваш, адрес электронной почты кажется скрытым, но префикс mailto все еще отображается. В Joomla, настраиваемое поле электронной почты заставляет меня вставить схему mailto, может поэтому префикс всегда отображается?
Ах да, это будет ваша проблема, это расширение навязывает что-то не так. За советом обращайтесь к автору расширения.
Спасибо за ваш ответ, но он слишком общий. Код PHP, который я сообщил выше (после вашего ответа), также действителен для отображения других протоколов (http: // https: // ftp: // ...), которые используются для настраиваемых полей URL со следующими схемами http: // https: // ftp: //