Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена определенных слов в документе 
:(
    Опции темы
Aliance
Дата 22.5.2005, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Как заменить в документе определенные слова, заключенные между %...% на их определенные заменители. Оба значения берутся из массива. Читал на php.net про ereg(i), ereg(i)_replace и т.п. но не помогло, т.к. третий параметр весь документ. Соотв. нужно инклюдить его... в общем заморочка, не хочу. Есть другой способ?

По человечески. Имеем документ index.php:
Код

<HTML>
<BODY>

jhjhj
%TABLE%
hjhgjhg
%SMTH_ELSE% 

</BODY>
</HTML>


Как заменить %TABLE% на <hr>, а %SMTH_ELSE% на <br>, скажем. При чем, должен учитываться регистр. Желательно...

Это сообщение отредактировал(а) Aliance - 22.5.2005, 20:46
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



str_replace( "#%TABLE%#" , "<hr>" , $txt );
Но это для данного конкретного случая. Для пармера шаблонов надо делать preg_replace с callback функцией.
PM ICQ   Вверх
Aliance
Дата 22.5.2005, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Mal @ 22.5.2005, 21:49)
str_replace( "#%TABLE%#" , "<hr>" , $txt );

Я же написал, что это не подходит... Я не хочу извратами получать $txt...

Цитата(Mal @ 22.5.2005, 21:49)
Для пармера шаблонов надо делать preg_replace с callback функцией

smile
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



http://forum.vingrad.ru/index.php?showtopi...ad=#entry356239
Вот тут мне объясняли. Последние файлы с таким подходом.
PM ICQ   Вверх
Aliance
Дата 22.5.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Не нашел... smile
Там вообще ж дело о подсветке :-)
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 22.5.2005, 23:26)
Там вообще ж дело о подсветке :-)

Дело в подходе.
Код
return preg_replace( "#%(.+?)%#ie" , "hl_do( '\\1' )" , $code , TRUE );

function hl_do( $text )
 {
  switch( $text )
   {
     case "TITLE": return "это заголовок" break;
     case "TITLE1": return "это заголовок 1" break;
     case "TITLE2": return "это заголовок2" break;
     default: return "неверное имя шаблона";
   }
 }


PM ICQ   Вверх
Aliance
Дата 22.5.2005, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



При чем тут это непонимаю.
Мне нужно в странице написать %test% и при выходе получить HTML вместо %test% - <b>bla-bla-bla</b>
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Код
<?php

$code = "adhakdjdhsa %test% dh";
print preg_replace( "#%(.+?)%#ie" , "hl_do( '\\1' )" , $code , TRUE );

function hl_do( $text )
 {
  switch( $text )
   {
     case "test": return "<b>bla-bla-bla</b>"; break;
   }
 }

?>

PM ICQ   Вверх
Aliance
Дата 22.5.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Mal Hack
smile ррр
Как в строке я знаю!
Я не знаю как во всем документе!
Можно канечно сделать файл index2.php с этой разметкой, а потом в index.php написать такое:
Код

include("index2.php");
$a = file("index2.php");
str_replace( "#%TABLE%#" , "<hr>" , $a );

Но я так не хочу! Я спрашиваю можно именно в самом документе получить ссылку на само себя...?
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 23.5.2005, 00:38)
Я не знаю как во всем документе!

А чем весь документ от строки не отличается? smile

Цитата(Aliance @ 23.5.2005, 00:38)
Я спрашиваю можно именно в самом документе получить ссылку на само себя...?

А это как понимать? smile

PM ICQ   Вверх
Aliance
Дата 22.5.2005, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Mal @ 23.5.2005, 00:42)
А чем весь документ от строки не отличается?

Не знаю smile Вот и я хочу узнать, но для этого нужен пример с документом, а не со строкой.

Цитата(Mal @ 23.5.2005, 00:42)
А это как понимать?

Млин. Незнаю как объяснить еще:
Есть файл index.php, там пишем:
Код

привет, это я, сегодня %time% часов!


А браузер должен получить такой код в этой же страничке:
Код

привет, это я, сегодня <b>69</b> часов!

PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Код
<?php
$code = file_get_contents( "file.txt" );
print preg_replace( "#%(.+?)%#ie" , "hl_do( '\\1' )" , $code , TRUE );
function hl_do( $text )
 {
  switch( $text )
   {
     case "test": return "<b>bla-bla-bla</b>"; break;
   }
 }
?>

При этом текстоый файлл не имеет отношения к PHP.
PM ICQ   Вверх
Aliance
Дата 23.5.2005, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



нет, опять не-то. Я же написал
Цитата(Aliance @ 23.5.2005, 00:51)
получить такой код в этой же страничке:

Т.е. $code должна ссылатся на тот документ, где она написана // грубо говоря

*окончательно обессилив, ушел спать*

PM MAIL WWW ICQ Skype   Вверх
Mont
Дата 23.5.2005, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Vingrad developer
Сообщений: 274
Регистрация: 13.11.2004
Где: Altay

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



с трудом но вроде понял... smile
так если у тебя в этом же файле написано:
Код

привет, это я, сегодня %time% часов!


значит тебе просто надо это дело писать не ввиде HTML, а в ПХП выводить через echo, или print. Ну а там соответственно подставляй какие хочешь значения.

но это конечно если я тебя правильно понял smile


--------------------
"Если однажды Вдруг
Меня не окажется вовсе
в заповедной заветной тарелке
Твоего праведного сновидения
Знай - Неуловимые мстители настигли меня."
© Егор Летов
PM MAIL ICQ   Вверх
IZ@TOP
Дата 23.5.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Я понял что ты хочешь. Нужно заменить текст в вызываемом РHTML документе?
Тогда извращаемся след. образом:

Код

<?php
ob_start();
?>
<html>
...
<body>
bla-bla %text% ... la-la-la..
</body>
</html>
<?php
$buff = ob_get_clean();
str_replace('%text%', 'bla-bla2', $buff);
?>


Но это ИМХО уже изврат полный. Выноси содержимое в отдельный файл. К примеру index.tpl, потом читай, потом заменяй, и выводи.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Aliance
Дата 23.5.2005, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Mont @ 23.5.2005, 05:37)
значит тебе просто надо это дело писать не ввиде HTML, а в ПХП выводить через echo, или print. Ну а там соответственно подставляй какие хочешь значения.

Нет, я же написал файл называется index.php - т.е. там сочитаются HTML и PHP!

IZ@TOP
Да, получается изврат.

Ладно, скажу проще. В IPB есть такие вещи в PHP файле:
Код

...
{BLA-BLA-BLA}
...

И это заменяется на то-то и то-то... Макросы другим словом.
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 23.5.2005, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 23.5.2005, 09:21)
Ладно, скажу проще. В IPB есть такие вещи в PHP файле:

Это по тому принципу, который я тебе показал.
PM ICQ   Вверх
Opik
Дата 23.5.2005, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Aliance
сами макросы в IPB хранятся в базе.

Код

        $TAGS = $DB->query("SELECT macro_value, macro_replace FROM ibf_macro WHERE macro_set={$ibforums->skin['macro_id']}");
              while ( $row = $DB->fetch_row($TAGS) )
              {
                        if ($row['macro_value'] != "")
                        {
                                $ibforums->skin['template'] = str_replace( "<{".$row['macro_value']."}>", $row['macro_replace'], $ibforums->skin['template'] );
                        }
                }

PM MAIL Skype   Вверх
Aliance
Дата 23.5.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Opr
Это мне ничего не дает... Тут принцип нужен :-)

Mal Hack
значит мне не дано понять это =)
PM MAIL WWW ICQ Skype   Вверх
Opik
Дата 23.5.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Aliance
я лишнее и так убрал и оставил 1 принцип.
в базе хранится
что меняется | на что меняется.
Код

 while ( $row = $DB->fetch_row($TAGS) )
              {
                        if ($row['macro_value'] != "")
                        {
                                $ibforums->skin['template'] = str_replace( "<{".$row['macro_value']."}>", $row['macro_replace'], $ibforums->skin['template'] );
                        }
                }

- производим замену.
в чем проблема?
PM MAIL Skype   Вверх
Mal Hack
Дата 23.5.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 23.5.2005, 16:31)
значит мне не дано понять это =)

Есть текст. В нем макросы (%test%).
Мы идем по тексту. Находим макрос. Передаем в функцию, которая возвращает значение, на которое мы заменяем этот макрос.
Сама функция смотрит, какой именно макрос пришел и исходя из этого возвращает текст. Уж как проще, прости не могу smile

PM ICQ   Вверх
Aliance
Дата 23.5.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Дело в том, Mal Hack, что в твоем примере текст из IPB берется из темпалта файла *.tpl - тоесть вместо 1 файла (index.php) их 2 (index.php, template.tpl). А я с самого начал поставил условие - файл один.
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 23.5.2005, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 23.5.2005, 21:41)
Дело в том, Mal Hack, что в твоем примере текст из IPB берется из темпалта файла *.tpl - тоесть вместо 1 файла (index.php) их 2 (index.php, template.tpl). А я с самого начал поставил условие - файл один.

Дык какая разница откуда берется... Главное что ты с ним потом делаешь!! smile
PM ICQ   Вверх
Aliance
Дата 23.5.2005, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



В сотый раз повторяю: я не знаю как взять в переменную ссылку на сам документ, чтобы из него вырезать то, что мне нужно.
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 23.5.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Код

<?php
ob_start();
?>

<html>
...
<body>
bla-bla %text% ... la-la-la..
</body>
</html>

<?php
$code = ob_get_clean();
print preg_replace( "#%(.+?)%#ie" , "hl_do( '\\1' )" , $code , TRUE );
function hl_do( $text )
 {
  switch( $text )
   {
     case "test": return "<b>bla-bla-bla</b>"; break;
   }
 }

?>

PM ICQ   Вверх
Aliance
Дата 23.5.2005, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Не работает
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 23.5.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Код
<?php
ob_start();
?>
<html>
...
<body>
bla-bla %test% ... la-la-la..
</body>
</html>
<?php
$code = ob_get_clean();
print preg_replace( "#%(.+?)%#ie" , "hl_do( '\\1' )" , $code , TRUE );
function hl_do( $text )
 {
  switch( $text )
   {
     case "test": return "<b>bla-bla-bla</b>"; break;
   }
 }
?>

PM ICQ   Вверх
Aliance
Дата 23.5.2005, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Mal Hack
А есть отличия?
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 23.5.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 23.5.2005, 22:50)
А есть отличия?


Цитата(Mal @ 23.5.2005, 21:48)
bla-bla %text% ... la-la-la..


Цитата(Mal @ 23.5.2005, 22:44)
bla-bla %test% ... la-la-la..

smile
PM ICQ   Вверх
Aliance
Дата 23.5.2005, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Пасип, работает. Но больно муторно как-то...подумаю, использовать ли ))
С меня плюс
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 23.5.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 122
Всего: 261



Цитата(Aliance @ 24.5.2005, 00:10)
Но больно муторно как-то...подумаю, использовать ли ))

Это единственный способ получить то, что ты уже якобы отправил пользователю.
PM ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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