Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Форум для новичков » В Помощь скриптодельцам!


В Помощь скриптодельцам!

Сообщений 21 страница 24 из 24

21

Многие скрипты, использующиеся на сервисе, работают с HTML, вставляемым пользователем (или модератором),
Часто в использующемся HTML содержатся ошибки, и такой код без обработки при вставке ломает страницу,
Написал небольшой код на основе jQuery, проверяющий и корректирующий ошибки в HTML:

Корректируем HTML с ошибками

function correctHTML(str){
  return $('<div />').html(str.replace(/(<)(\/?)(?:script)([\s\S]*?)(>)/gim,'$1$2jstoken$3$4')).html().replace(/jstoken/gim,'script');
}

Пример использования: (исправляем строку с HTML с ошибками)

<script>
function correctHTML(str){
  return $('<div />').html(str.replace(/(<)(\/?)(?:script)([\s\S]*?)(>)/gim,'$1$2jstoken$3$4')).html().replace(/jstoken/gim,'script');
}


//HTML с ошибками
var str = '<div><div><div>test<script src="/script.js">alert()<'+'/script><plaintext></plaintext></span>';
var str2 = correctHTML(str);
alert(str+'\n\n'+str2);  //выведет исходную строку и ниже - исправленную
</script>

+2

22

Иногда при работе с пользовательским выделением(к примеру при цитировании) бывает нужно получить не только текст выделения, но и его HTML, -
Выкладываю готовый код для кроссбраузерного получения HTML-содержимого выделения, с автозакрытием тегов и корректировкой

Получаем HTML пользовательского выделения

window.selectionHTML = function() {
  var e, d = "";
  if (!document.selection) {
    e = window.getSelection();
    if (!e.isCollapsed) {
      e = e.getRangeAt(0);
      var f = document.createElement("div");
      f.appendChild(e.cloneContents());
      d = f.innerHTML
    } else d = ""
  } else d = document.selection.createRange().htmlText
  return d
};

Пример работы:

<script>
window.selectionHTML = function() {
  var e, d = "";
  if (!document.selection) {
    e = window.getSelection();
    if (!e.isCollapsed) {
      e = e.getRangeAt(0);
      var f = document.createElement("div");
      f.appendChild(e.cloneContents());
      d = f.innerHTML
    } else d = ""
  } else d = document.selection.createRange().htmlText
  return d
};


//Выводим пользовательское выделение при попытке копирования мышкой
$(document).on("mouseup",function () {
  var selection = selectionHTML();
  if(selection.length) alert(selection);
});
</script>

+3

23

:glasses: Тема не для юзер обсуждений!
Тут только коды от умеющих!!
Для диалогов  есть тема => Запросы по скриптам[9]

+1

24

Трансформация больших массивов данных в base64 для загрузки в API:

Зачем это нужно ? Cпецсимволы и русскоязычный текст для       
загрузки в API нужно преобразовывать, ибо API воспринимает ток UTF-8

function unPack(a) {
        return LZString.decompressFromUTF16(decodeURIComponent(escape(atob(a))));
    }
    function Pack(a) {
        return btoa(unescape(encodeURIComponent(LZString.compressToUTF16(a))));
    }

Тест:

Код:
<script type="text/javascript">
var a = "Здравствуйте! Нужна помощь, я не знаю как сделать так, что-бы поставить 1 фотографию всем пользователям сразу после регистрации их. А потом они уже сами меняли.";
function unPack(a) {
        return LZString.decompressFromUTF16(decodeURIComponent(escape(atob(a))));
    }
    function Pack(a) {
        return btoa(unescape(encodeURIComponent(LZString.compressToUTF16(a))));
    }
    var Упаковано = Pack(a);
    var Распаковано = unPack(Упаковано)
alert(Упаковано+'\n=======================\n'+Распаковано)
</script>

Оптимально использовать для объёмов от 30кб и выше... для более мелких объёмов  строка после упаковки превышает исходную(ну то есть лучше упаковывать весь массив(объект) для одного ключа(тогда начальный объём без разницы)...

Отредактировано Deff (Пн, 17 Май 2021 15:00:56)

+1


Вы здесь » Единый форум поддержки » Форум для новичков » В Помощь скриптодельцам!