Отмена экранирования адреса электронной почты

#
Отмена экранирования адреса электронной почты
В документе вписан адрес электронной почты, при выводе его на сайт, он автоматически экранируется javascript-кодом. Есть ли возможность отменить автоматическое (принудительное) экранирование почтового адреса или хотя бы сделать данный кусок кода валидным по стандарту xhtml?
Заранее спасибо за ответ.
#
Re: Отмена экранирования адреса электронной почты
В ЦА, в разделе "Сайты" открыть редактирование нужного сайта, и на вкладке "Основные" снять галочку "Защищать e-mail на страницах сайта". Применить.
Заказов не беру. Консультирую редко.
#
Re: Отмена экранирования адреса электронной почты
Спасибо большое. Это одно из решений. Я пошел немного дальше и поковырялся в коде CMS. Путем замены (дополнения) нескольких строк кода, сделал код javascript'а валидным. Может разработчики в будущих версиях примут это на заметку и внесут изменения в свой код.

Правил этот файл: \modules\core\command\controller\default.php

Было:

<?php
function safe_email_callback($matches)
{
  ob_start();
  ?><script type="text/javascript"><?php
  ?>function hostcmsEmail(c){return c.replace(/[a-zA-Z]/g, function (c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c-26);})}<?php
  ?>document.write ('<a <?php echo strip_nl($matches[1])?> href="mailto:' + hostcmsEmail('<?php echo strip_nl(str_rot13($matches[2]))?>') + '"<?php echo strip_nl($matches[3])?>>' + hostcmsEmail('<?php echo strip_nl(str_rot13($matches[4]))?>') + '</a>');</script><?php

  return ob_get_clean();
}
?>


Стало:

function safe_email_callback($matches)
{
  ob_start();
  define('CRLF', "\n");
  echo CRLF;
  echo '<script type="text/javascript">';
  echo '//<![CDATA['.CRLF;
  echo 'function hostcmsEmail(c){return c.replace(/[a-zA-Z]/g, function (c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c-26);})}'.CRLF;
  echo 'document.write(\'<a '.strip_nl($matches[1]).' href="mailto:\' + hostcmsEmail(\''.strip_nl(str_rot13($matches[2])).'\') + \'"'.strip_nl($matches[3]).'>\' + hostcmsEmail(\''.strip_nl(str_rot13($matches[4])).'\') + \'<\/a>\');'.CRLF;
  echo '//]]>';
  echo '</script>'.CRLF;

  return ob_get_clean();
}


Может кому-то пригодится.
Модератор
#
Re: Отмена экранирования адреса электронной почты
не соглашусь с переводом строк до и после <script>, это добавить пробелы при отображении там, где их не было. Предлагаю такой вариант:
function safe_email_callback($matches)
         {
            ob_start();
            ?><script type="text/javascript"><?php
            echo "//<![CDATA[\n";
            ?><?php
            ?>function hostcmsEmail(c){return c.replace(/[a-zA-Z]/g, function (c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c-26);})}<?php
            ?>document.write ('<a <?php echo strip_nl($matches[1])?> href="mailto:' + hostcmsEmail('<?php echo strip_nl(str_rot13($matches[2]))?>') + '"<?php echo strip_nl($matches[3])?>>' + hostcmsEmail('<?php echo strip_nl(str_rot13($matches[4]))?>') + '</a>');<?php
            echo "//]]>\n";
            ?></script><?php

            return ob_get_clean();
         }
Авторизация