0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
1

Нужно разбить строку по условию <?.?>, <?php ?>

22.12.2012, 22:37. Показов 2613. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Нужна помощь.
К примеру, есть запись в бд вида:

текст текст текст текст текст текст текст текст <?php ... ?> текст текст текст текст <? ... ?> текст текст текст текст текст текст текст текст текст текст текст <?php ... ?>. Нужно разбить этот текст в массив вида:

[0] => текст текст текст текст текст текст текст текст,
[1] => <?php ... ?>,
[2] => текст текст текст текст,
[3] => <? ... ?>,
[4] => текст текст текст текст текст текст текст текст текст текст текст,
[5] => <?php ... ?>

Как можно такое реализовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2012, 22:37
Ответы с готовыми решениями:

Разбить поле и создать новую строку по условию
ДОброго всем времени суток! Хочу реализовать следующее: 1. имеем таблицу с полями Field1, Field2,...

Нужно разбить строку
Есть вот такая строка АВСТРАЛИЯ: Премьер-лига Виктории45+'Мельбурн Найтс - Оакли Кэннонс...

Нужно разбить строку на числа
Приветствую всех! Суть в том что синтаксис split для меня на данный момент дремучий лес, а задача...

Как разбить строку на слова по некоторому символу, php?
Есть строка &quot;город (Субъект)&quot;. Например, &quot;Чита (Забайкальский край)&quot; как мне разделить эту строку...

16
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
23.12.2012, 00:03 2
зачем это нужно? опиши подробно задачу, возможно этого и не требуется.
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 00:38  [ТС] 3
Цитата Сообщение от Василий Макогон Посмотреть сообщение
зачем это нужно? опиши подробно задачу, возможно этого и не требуется.
Есть задача -- хранение всех страниц сайта в отдельной таблице в бд. Необходимо, чтобы помимо html кода в базе мог храниться и php код в любом количестве как строк, так и конструкций типа <? .. ?>, <?php ... ?>. Вытащить такую запись из БД не составляет труда, однако проблема в том, чтобы полученный текст отображался как текст, а конструкции php обрабатывались как php-код.

Я пришел к выводу разбить всю строку на подстроки, и искать в начале "<?". Если находим, то используем функцию eval, если не находим, то echo.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
23.12.2012, 00:56 4
Цитата Сообщение от chertog Посмотреть сообщение
Я пришел к выводу
убрать php-код из данных, т.к. php-код не является данными.
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:06  [ТС] 5
Цитата Сообщение от OnYourLips Посмотреть сообщение
убрать php-код из данных, т.к. php-код не является данными.
php код не является данными, но что может мешать мне хранить его в базе данных? Мне нужно чтобы код интерпретировался, и мне кажется, что этого можно достичь. Подскажите решение лучше, если знаете. Убрать код из данных на данный момент не решение
0
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:11 6
Структура данных везде одинакова, т.е. всегда в 1,3,5 элементе массива будет код php? Если нет, то нужно двумя регулярками прогонять, да и решение какое-то "кривое" получиться )))
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:15  [ТС] 7
Цитата Сообщение от fa2m Посмотреть сообщение
Структура данных везде одинакова, т.е. всегда в 1,3,5 элементе массива будет код php?
Нет, php конструкций может быть сколько угодно и располагаться они могут как угодно. Т. е. могут располагаться даже одна за одной, а могут совсем отсутствовать.
0
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:19 8
Вот, блин ))) Тогда получается нужно разбивать регуляркой, а потом ещё каждый элемент проверять на наличие в нём PHP кода, чтобы применить к нему eval().
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:19  [ТС] 9
Да я думал про две регулярки и два массива, но мне показалось, что решение реально "кривое") Неужели нет функции в php которая бы разбивала строку по регулярному выражению, при этом оставляя результат регулярного выражения так же в массиве?
0
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:24 10
Даже решение с двумя регулярками не поможет (это я поспешил), поскольку Вы то получите отдельно текст, отдельно код, но не будете знать, что за чем идёт
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
23.12.2012, 01:28 11
Цитата Сообщение от chertog Посмотреть сообщение
но что может мешать мне хранить его в базе данных?
здравый смысл.

Цитата Сообщение от chertog Посмотреть сообщение
Подскажите решение лучше, если знаете.
Уже.
Вынести код туда, где ему место.
В зависимости от кода.
0
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:30 12
А в тексте html теги есть?
1
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:57  [ТС] 13
Чтож, вариант хранить все страницы в отдельных файлах (которые лежат в отдельных каталогах), и создавать таблицу соответствий в бд, с заголовками, мета данными и символьными кодами, как это делает битрикс. Однако, это создает неудобное нагромождение. И хочется чего-то поудобнее.
Нечто подобное тому, чего я хочу, реализует modx. Однако там вызов кода реализуется с помощью специальных конструкций вида {{}}, и с помощью этих конструкций тянуться php файлы.
Я же хочу перенести всю работу страниц сайта в базу данных, только с тем условием, что можно спокойно писать в этих кодах как html код, так и php.

Добавлено через 18 минут
И все же, господа, неужели нет способа разбить такую строку в нужный мне массив?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.12.2012, 02:19 14
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$text = 'текст текст текст текст текст текст текст текст <?php echo "One"; ?> 
текст текст текст текст <? echo "Two"?> текст текст текст текст текст текст текст 
текст текст текст текст <?php echo "Three";?>. Нужно разбить этот текст в массив вида:';
$pattern = '~.*?<\?(php)?(.*?)\?>.*?~is';
if(preg_match_all($pattern, $text, $matches)) {
    echo '<pre>';
    if(!empty($mathes[2]))
        print_r($matches[2]);
    else
        echo 'PHP-код не найден';
    echo '</pre>';
}
else
    echo 'Совпадений не найдено';
только это явно не лучшее решение

Добавлено через 1 минуту
для html надо писать отдельный парсер
1
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 06:20  [ТС] 15
в общем в итоге получилось как то так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    $pattern = '~.*?<\?(php)?(.*?)\?>.*?~is';
    if(preg_match_all($pattern, $PageInformation[content], $matches)) {
      $i = 0;
      while($i <= count($matches[0])){
        if(!empty($matches[0][$i])) {
          $patt = '/(<\?.*\?>)/s';
            $matches[0][$i] = preg_replace($patt, '', $matches[0][$i]);
          echo $matches[0][$i];
        }
        if(!empty($matches[2][$i])) {
          $code = $matches[2][$i];
          eval($code);
        }
        $i++;
      }
    }
0
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
23.12.2012, 10:54 16
ну у вас явно ужасающая архитектура
хранить в БД нужно данные, а не php код
нет никаких причин хранить php код в теле "страниц", т.е. шаблонах
да и шаблоны в БД хранит нет смысла

я бы вот что сделал - я бы кэшировал как файлы ваши данные из таблиц и с помощью буферизации вывода генерировал бы страницы и через include подключал. но, повторюсь - ваша архитектура - гумно, уходите от неё.
1
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 20:11  [ТС] 17
Цитата Сообщение от Василий Макогон Посмотреть сообщение
ну у вас явно ужасающая архитектура
хранить в БД нужно данные, а не php код
нет никаких причин хранить php код в теле "страниц", т.е. шаблонах
да и шаблоны в БД хранит нет смысла

я бы вот что сделал - я бы кэшировал как файлы ваши данные из таблиц и с помощью буферизации вывода генерировал бы страницы и через include подключал. но, повторюсь - ваша архитектура - гумно, уходите от неё.
Спасибо, я подумаю. Задумка вот в чем у меня:

Существуют некие классы, выводящие на веб-страницу определенные элементы (к примеру форму авторизации, если пользователь не авторизован, блок новостей, и т. д.) метод класса вызывается одной строчкой кода, вида
PHP
1
inc::Object("name_object", $settings = Array("template" => "name_template", "pagination" => 10, ...);
идея в том, чтобы организовать визуальный редактор страницы на сайте, с добавлением драг н дропом каких-то подобных элементов (элементы на панели отображаются в виде иконок, кликая на иконку в окно автоматически вставляется код).

Сейчас я думаю, что если ввести некий синтаксис отвечающий за вывод таких элементов (к примеру возьмем конструкцию вида {= =}, в которой будем передавать определенные настройки, а при отображении страницы заменять эти конструкции реальным кодом с заданными настройками. Такой вариан смотрится лучше, или тоже не годится?
0
23.12.2012, 20:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2012, 20:11
Помогаю со студенческими работами здесь

Нужно разбить строку с арифметическим выражением на маленькие блоки
Добрый вечер, помогите разбить строку с арифметическим выражением на маленькие блоки. Т.е. мне...

Нужно сдвинуть строку в таблице по условию
Здравствуйте форумчане. Делаю дипломный проект, нужна небольшая помощь. Ситуация такая: Делаю...

нужно разбить строку на массив, ошибка: assignment to expression with array type o=0;
Дана строка, состоящая из однозначных и двузначных чисел, разделенных пробелами. Необходимо разбить...

нужно разбить исходную строку на две подстроки , причём первая длинной k
Вообщем нужно разбить исходную строку на две подстроки , причём первая длинной k. Вот код который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru