26.01.2010, 11:47
|
Профессор
|
|
Регистрация: 12.05.2009
Сообщений: 317
|
|
конвертировать html-коды
Здраствуйте, не смог придумать строчку для поискового запроса. поэтому просто задав жутко тривиальный вопрос, есть у кого готовая функция для коевертирования html-кодов в их собственно нормальное представление?
|
|
26.01.2010, 12:12
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
var t= document.createElement('textarea')
t.innerHTML= '<'
alert( t.value )
__________________
.ня
|
|
26.01.2010, 13:25
|
Профессор
|
|
Регистрация: 12.05.2009
Сообщений: 317
|
|
Сообщение от tenshi
|
var t= document.createElement('textarea')
t.innerHTML= '<'
alert( t.value )
|
вы действительно так делаете?!
Последний раз редактировалось da_ff, 26.01.2010 в 13:31.
|
|
26.01.2010, 13:28
|
Профессор
|
|
Регистрация: 12.05.2009
Сообщений: 317
|
|
пришлось писать свое
function convertSpecSymbols (str, toText) {
var
symbols = [
['&', '&'],
['<', '<'],
['>', '>'],
['∧', '^'],
['∼', '~']
],
pos = -1;
if (typeof toText == 'undefined' || toText) {
for (var i = 0, n = symbols.length; i < n; i++) {
while ((pos = str.indexOf(symbols[i][0], pos + 1)) != -1) {
str = str.substring(0, pos) + symbols[i][1] + str.substring(pos + symbols[i][0].length);
}
}
} else {
for (var i = 0, n = symbols.length; i < n; i++) {
while ((pos = str.indexOf(symbols[i][1], pos + 1)) != -1) {
str = str.substring(0, pos) + symbols[i][0] + str.substring(pos + symbols[i][1].length);
}
}
}
return str;
}
Последний раз редактировалось da_ff, 26.01.2010 в 13:30.
|
|
26.01.2010, 15:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от da_ff
|
symbols = [ ['&', '&'], ['<', '<'], ['>', '>'], ['∧', '^'], ['∼', '~'] ],
|
аха
а теперь возьмите, и создайте нормальный массив хотя бы для этих именованных символов
Сообщение от da_ff
|
вы действительно так делаете?!
|
вы не поверите, но это будет быстрее и полнее чем ваша ф-ция
|
|
26.01.2010, 15:29
|
Профессор
|
|
Регистрация: 12.05.2009
Сообщений: 317
|
|
действительно полагаете что так будет быстрее? если вы проверяли то скажите сразу, чтобы не мучиться.
Последний раз редактировалось da_ff, 26.01.2010 в 15:35.
|
|
26.01.2010, 15:35
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Насчёт скорости не знаю, но тащить огромную таблицу символов ради сомнительной функции точно не стоит.
|
|
26.01.2010, 15:49
|
Профессор
|
|
Регистрация: 12.05.2009
Сообщений: 317
|
|
во-первых, таблица конечная
во-вторых, скорость в плане приоритета куда выше объема написанного кода.
в-третьих, почему функция сомнительна?! сомнительна реализация функции, сама функция мне нужна и сомнительного в ней ничего нет.
|
|
26.01.2010, 16:03
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от da_ff
|
во-первых, таблица конечная
|
Разумеется конечная, хотя бы потому, что множество символов конечно. Но немаленькая.
Сообщение от da_ff
|
во-вторых, скорость в плане приоритета куда выше объема написанного кода.
|
Различие в скорости будет много меньше различия в размерах. Более того -- различие в скорости будет мизерным.
Сообщение от da_ff
|
в-третьих, почему функция сомнительна?
|
Ну вот мне, например, никогда такая функция ещё не нужна была. Только теги заэскейпить -- да, а вот туеву хучу остальных символов -- нет. Я не исключаю, что вам это понадобилось, но это действительно очень редкий случай.
|
|
26.01.2010, 16:41
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от da_ff
|
действительно полагаете что так будет быстрее? если вы проверяли то скажите сразу, чтобы не мучиться.
|
оптимизированный для многократного применения вариант tenshi, быстрее вашей ф-ции уже после 50-и <
Если же вашу ф-цию переписать нормально, то она становится быстрее на любых тестах(по-крайней мере до 1000-и <
НО! если добавить в массив symbols еще сотню пар хотя бы, то на тысяче < ваша ф-ция даже оптимизированная сдает позиции
как итог, ваша ф-ция более быстрая при меньшей универсальности
НО!
включение посторонних(не &xxx; ) символов сильно тормозит вашу ф-цию, а tenshi-вариант абсолюбтно не замедляется
(function(){
var t= document.createElement('textarea');
func1=function(text){
t.innerHTML=text;
return t.value
}
})();
function func2 (str, toText) {
var
symbols = [
['&', '&'],
['<', '<'],
['>', '>'],
['∧', '^'],
['∼', '~'],
[' ',' '],
['¡','¡'],
['¢','¢'],
['£','£'],
['¤','¤'],
['¥','¥'],
['¦','¦'],
['§','§'],
['¨','¨'],
['©','©'],
['ª','ª'],
['«','«'],
['¬','¬'],
['­',''],
['®','®'],
['¯','¯'],
['°','°'],
['±','±'],
['²','²'],
['³','³'],
['´','´'],
['µ','µ'],
['¶','¶'],
['·','·'],
['¸','¸'],
['¹','¹'],
['º','º'],
['»','»'],
['¼','¼'],
['½','½'],
['¾','¾'],
['¿','¿'],
['À','À'],
['Á','Á'],
['Â','Â'],
['Ã','Ã'],
['Ä','Ä'],
['Å','Å'],
['Æ','Æ'],
['Ç','Ç'],
['È','È'],
['É','É'],
['Ê','Ê'],
['Ë','Ë'],
['Ì','Ì'],
['Í','Í'],
['Î','Î'],
['Ï','Ï'],
['Ð','Ð'],
['Ñ','Ñ'],
['Ò','Ò'],
['Ó','Ó'],
['Ô','Ô'],
['Õ','Õ'],
['Ö','Ö'],
['×','×'],
['Ø','Ø'],
['Ù','Ù'],
['Ú','Ú'],
['Û','Û'],
['Ü','Ü'],
['Ý','Ý'],
['Þ','Þ'],
['ß','ß'],
['à','à'],
['á','á'],
['â','â'],
['ã','ã'],
['ä','ä'],
['å','å'],
['æ','æ'],
['ç','ç'],
['è','è'],
['é','é'],
['ê','ê'],
['ë','ë'],
['ì','ì'],
['í','í'],
['î','î'],
['ï','ï'],
['ð','ð'],
['ñ','ñ'],
['ò','ò'],
['ó','ó'],
['ô','ô'],
['õ','õ'],
['ö','ö'],
['÷','÷'],
['ø','ø'],
['ù','ù'],
['ú','ú'],
['û','û'],
['ü','ü'],
['ý','ý'],
['þ','þ'],
['ÿ','ÿ']
],
pos = -1;
if (typeof toText == 'undefined' || toText) {
for (var i = 0, n = symbols.length; i < n; i++) {
str=str.replace(new RegExp(symbols[i][0],'g'),symbols[i][1]);
}
} else {
for (var i = 0, n = symbols.length; i < n; i++) {
str=str.replace(new RegExp(symbols[i][1],'g'),symbols[i][0]);
}
}
return str;
}
</script>
<script type="text/javascript">
var text='<'
var start = new Date();
for (var i = 0; i < 10000; i++)
{
func1(text);
}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 10000; i++)
{
func2(text);
}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var text='<||<|<|<|<|'+'<|<|<|<|<|'+
'<|<|<|<|<|'+'<|<|<|<|<|'+
'<|<|<|<|<|'+'<|<|<|<|<|'+
'<|<|<|<|<|'+'<|<|<|<|<|'+
'<|<|<|<|<|'+'<|<|<|<|<|'
;
text+=text;
text=(text+text+text+text+text);
text+=text;
var start = new Date();
for (var i = 0; i < 100; i++)
{
func1(text);
}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 100; i++)
{
func2(text);
}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var text='<||<||<||<||<||'+'<||<||<||<||<||'+
'<||<||<||<||<||'+'<||<||<||<||<||'+
'<||<||<||<||<||'+'<||<||<||<||<||'+
'<||<||<||<||<||'+'<||<||<||<||<||'+
'<||<||<||<||<||'+'<||<||<||<||<||'
;
text+=text;
text=(text+text+text+text+text);
text+=text;
var start = new Date();
for (var i = 0; i < 100; i++)
{
func1(text);
}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 100; i++)
{
func2(text);
}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
потестируйте сами
|
|
|
|