Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключить текст не удаляя его 
:(
    Опции темы
Sanchezzz
Дата 30.6.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Добрый день, сталкнулся с такой задачей.

Есть текст php и html задача нужно как то исключить при редактирование текста код php от html а потом соеденить обратно.
подскажите идеи?


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Soah
Дата 30.6.2009, 17:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 8
Всего: 54



А можно чуть подробнее, желательно с примерами, что есть и как должно выглядеть smile 
PM MAIL   Вверх
Sanchezzz
Дата 1.7.2009, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



фактически нечего нет,  есть текст php и html который загружается в textarea,
нужно найти теги от <? и до ?> и каждый найденный отрезок поместить в массив сам текст, начало позиции, и конец.






--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Soah
Дата 1.7.2009, 13:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 8
Всего: 54



Цитата(Sanchezzz @  30.6.2009,  14:39 Найти цитируемый пост)
подскажите идеи?

Код

<script type="text/javascript">
    window.onload = function() {
        document.getElementById('txt').value = "<? echo 'Hello';\necho 'world!'?>\n<div>1234</div>";
    }
    
    function extract() {
        var txt = document.getElementById('txt').value;
        var beg = txt.indexOf('<?');
        var end = txt.indexOf('?>', beg);
        
        alert(txt.substr(beg, end+2));
    }
</script>

<textarea id="txt" rows="20" cols="70"></textarea><br />
<input type="button" value="extract" onclick="extract();" />

PM MAIL   Вверх
Sanchezzz
Дата 2.7.2009, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



а как вставить обратно текст в нужную позицию? зная значение beg


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 2.7.2009, 08:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Sanchezzz, Чего-то тут не то. Это что такое - схема online редактирования шаблонов/страничек в админке?

Если это суровый и мрачный одмин, от него не нужно скрывать php вставки. Вдруг чего хорошего напишет.

Если Advansed User, который верит, что php кусочки нужны и делают то, что надо, а редактировать их вредно для здоровья, то эти кусочки можно заменить на {php 1}, {php 2} и так далее в порядке их встречи. примерно так поступает ДримВейвер в своем визуальном редакторе. После редактирования - заменить все такие {php X} обратно. Если какой-то кусочек потерялся - мрачно выругаться и предложить юзеру исправится...

Если это простой юзер, которому в общем-то пофиг что там такое написано и всякие странные закорюки он вычистит с удовольствием, и после этого будет чувствовать себя правым, в этом случае вообще нельзя выдавать для редактирования активные шаблоны.

Обойтись при этом позицией вставки, как можно догадаться, невозможно. 
Код

<? echo 'Hello';\necho 'world!'?>\n<div>1234</div>

В такой конструкции можно захотеть поменять и начало "шаблона" и хвост, так что определить, откуда ноги растут у php-вставки будет совершенно  непонятно...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
  Дата 2.7.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



с такой хр столкнулся думаю буду как дреймвивир вставлять [PHP]  с индификатором.
хочется для тупых узеров сделать визуальный редактор, так если они начнут редактировать php страничку , потом чтоб трубы не было, да и хоть как то немного защитить код php от редактирования, кривых рук.
---
пока у меня концепция будет такая в массив буду забивать текст и позиции вставки.
Что лудше вставлять картинку или текст спецального формата? я пока склоняюсь больше к тексту.
на картинку можно будет повесить картинку, минус не удобно, может мешать форматированию.
Цитата

Если это простой юзер, которому в общем-то пофиг что там такое написано и всякие странные закорюки он вычистит с удовольствием, и после этого будет чувствовать себя правым, в этом случае вообще нельзя выдавать для редактирования активные шаблоны.
 не удивительно но такие по подаются при чем мне на них везет (
ksnk спасибо? хорошею идею предложил, и родилась новая идея)))
сделать небольшой шобланизатор под свою систему... {include file} {initComponent} определенный набор команд. для превращения команд в пхп 


Это сообщение отредактировал(а) Sanchezzz - 2.7.2009, 09:42


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Sanchezzz
  Дата 3.7.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Народ почему не выполняется цикл?


Код

function strpos( haystack, needle, offset){
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}

var PHPCode = new Array();
var phpQInc = 0;
var npos = 0;
var spos = 0;

function getPHPCode(text) {
var o = text.length;
var opencloseteg = false;
var i = 0;
    while( i < o){
    shh = text.substr(i, 1);
    /*
    if(shh == '<' && i+1 < offset) 
    if(shh == " " || shh == "\r" || shh == "\n" || shh == "\t") continue;
    */
        if(text.substr(i , 2) == "<?" || text.substr(i , 5)=="<?php"){
            opencloseteg = true;
            spos = i;
            i= spos;    
        }
        
        if(opencloseteg==true)
            if(text.substr(i, 2) == "?>"){
                opencloseteg = false;
                
                npos = i;
                i = npos;
                phpQInc++;
                ext.substr(spos,npos+2);
                PHPCode[phpQInc] = {'code': tmptext , 'spos':spos , 'npos':npos};
                continue;
            }
        i++;
    }
    
}

getPHPCode('текст <? phpinfo();?>'); 

Файр баг ругаеться на строку в цикле не пойму что не так.

Это сообщение отредактировал(а) Sanchezzz - 3.7.2009, 14:27


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Soah
Дата 3.7.2009, 14:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 8
Всего: 54



Цитата(Sanchezzz @  3.7.2009,  14:21 Найти цитируемый пост)
Код

ext.substr(spos,npos+2);


Код

text.substr(spos,npos+2);


Добавлено через 3 минуты и 23 секунды
Код

<?
// ...
eval('?>code<?');
// ...
?>

Sanchezzz, я в код не вдавался, но такой вариант учитывается?
PM MAIL   Вверх
Sanchezzz
  Дата 3.7.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Soah Спасиб,
полчаса смотрел не туда )))
при нахождение тега там ошибка еще одна была
Код

    if(opencloseteg==true)
            if(text.substr(i, 2) == "?>"){
                opencloseteg = false;
                
                npos = i;
                i = npos;
                phpQInc++;
                var tmptext = text.substr(spos, (npos-spos)+2);
                PHPCode[phpQInc] = {'code': tmptext , 'spos':spos , 'npos':npos};
            }
        i++;
    }

теперь все нормально находит 
получается вот такая структура

PHPCode[0].code - мой код который нашли )) 
PHPCode[0].spos - Начало позиции
PHPCode[0].npos - конец позиции, это значение вообще лишнее. 

Осталось сделать как заменить текст на такие конструкции {PHP_1} {PHP_n} ... пройдя по массиву и вставить в нужную позиции текст. 



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Soah
Дата 3.7.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 8
Всего: 54



Цитата(Sanchezzz @  3.7.2009,  15:07 Найти цитируемый пост)
Осталось сделать как заменить текст на такие конструкции {PHP_1} {PHP_n}

Код

alert(text.slice(0, spos) + '{ PHP n}' + text.slice(nspos));


Метод slice

Это сообщение отредактировал(а) Soah - 3.7.2009, 15:34
PM MAIL   Вверх
Sanchezzz
Дата 7.7.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



чет не получается верно заменить весь текст от позиции до позиции в цикле, так как идет уменьшение  количество символов 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Sanchezzz
Дата 7.7.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



ЫЫЫ я победил javascript )))
вот готовое решение
Код

function strpos( haystack, needle, offset){
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}

var PHPCode = new Array();
var phpQInc = 0;
var npos = 0;
var spos = 0;

function getPHPCode(text) {

var o = text.length;
var opencloseteg = false;
var newtext = '';
var i = 0;
    while( i < o){
    shh = text.substr(i, 1);
    /*
    if(shh == '<' && i+1 < offset) 
    if(shh == " " || shh == "\r" || shh == "\n" || shh == "\t") continue;
    */
        if(text.substr(i , 2) == "<?" || text.substr(i , 5)=="<?php"){
            opencloseteg = true;
            spos = i;
            i= spos;
            newtext +=    '{{PHP_'+phpQInc+'}}';
        }
        
        if(opencloseteg==true)
            if(text.substr(i, 2) == "?>"){
                opencloseteg = false;
                npos = i;
                phpQInc++;
                i = npos;
                var tmptext = text.substr(spos, (npos-spos)+2);
                PHPCode[phpQInc] = {'code': tmptext , /*'spos':spos , 'npos':npos,*/ 'id_code' : '{{PHP_'+phpQInc+'}}'};
                
            }
        
        if(opencloseteg==false && text.substr(i, 2) != "?>"){
            if(i>0 && text.substr(i-1, 2) != "?>") newtext+=shh;
        }
            i++;
    }
return newtext;
}

Осталось сделать обратный процесс (((

Это сообщение отредактировал(а) Sanchezzz - 7.7.2009, 13:37


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.