проблемы с preg_replace

The_Wolf

Мой дом здесь!
Регистрация
21 Окт 2013
Сообщения
338
Реакции
200
есть код
PHP:
  function replaceBBCode($text) {
    $str_search = array(
      "#\[code\](.+?)\[\/code\]#is"
    );
    $str_replace = array(
      $code["\\1"]
    );
    return preg_replace($str_search, $str_replace, $text);
  }
Нужно так сделать : чтобы [сode]1[/сode] заменил на $code["1"] .
через \\1 не работает .
точнее переменное не работает (\\1).
ВАЖНО : чтобы заменял [сode]1[/сode] на значения переменной $code["1"]
 
Последнее редактирование:
Не получается вставить код нормально. Смотри здесь: Для просмотра ссылки Войди или Зарегистрируйся

PHP:
preg_replace('%\[code\](.*?)\[/code\]%i', '$code[\'$1\']', $text);
 
Последнее редактирование модератором:
Как сделать чтобы работало ??
таблица html содержит : ID и CODE
PHP:
<?php
    include('../admin/inc/config.php');
    mysql_select_db("phpsite",$connect);
    $result = mysql_query("SELECT * FROM html");
    $html = mysql_fetch_array($result);
        do {
            $html[$html['id']] = $html['code'];
        }
        while ($html = mysql_fetch_array($result));
  function replaceBBCode($text_post) {
    $str_search = "#\[html\](.+?)\[\/html\]#is";
    $str_replace = $html["\\1"];
    return preg_replace($str_search, $str_replace, $text_post);
  }
echo replaceBBCode("[html]2[/html]");
?>
Скрины таблицы : Для просмотра ссылки Войди или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
т.е. вы хотите чтобы [ b] hi[ /b ] стало <b>hi</b>?

Код:
// your code goes here
$text = "asdasd [b]xxx[/b] asdasd";
$result = preg_replace('%\[b\](.*?)\[/b\]%i', '<b>$1</b>', $text);
echo $result;

Для просмотра ссылки Войди или Зарегистрируйся

Input:
Код:
"asdasd [b]xxx[/b] asdasd"

Output
Код:
asdasd <b>xxx</b> asdasd
 
Вообще лучше не изобретать подобных велосипедов. В них ОЧЕНЬ легко накосячить и получить целый вагон XSS уязвимостей. Популярные форумные движки годами подобные баги вылавливали.

Лучше поищите готовое провернное решение, но я бы лучше отказался от подобных манипуляций, и использовал бы Markdown разметку и парсер.
 
Есть тег (бб-код) [HTМL] . Внутри его будет ID . ([HTМL]1[/HTМL]) .
Как сделать так чтобы с бд взял ID 1 и столбец code и заменял [HTМL]1[/HTМL] на значения столбца code с id'ом 1 ??
p.s : я не пишу форумный движок
 
Вот, теперь немного понятнее, хотя логика немного странная по крайней мере.

Сначала надо вытащить ид который находится в теге
PHP:
if (!preg_matchl('%\[html\](\d+)\[/html\]%i', $subject, $regs)) {
   return;
}
$id = $regs[1];

После чего есть два варианта: если массив маленький то можно загрузить все в один array используя ид как ключ, и напрямую просить данные
PHP:
$newData = $myArray[$id]['code']
Или же делать запрос к базе по ид который был найден ранее.

Когда у тебя будут данные для замены можешь делать
PHP:
echo str_replace($regs[0],$newData,$subject);

Причем учти что если тагов может быть больше чем один, то нужно использовать preg_match_all и потом делать цикл.
 
Есть функция интерпретации php кода .
PHP:
<?php
function interpratePHP($element){
$element = preg_replace('/\s{2,}/iu', '', $element);
$result = preg_replace_callback('~\[php\](.*)\[\/php\]~ui',
create_function('$matches',' ob_start(); eval("$matches[1]"); $result = ob_get_contents(); ob_end_clean(); return $result;'), $element);
return $result;
}
    echo interpratePHP('[phр]include("1.php");[/phр]');
?>
не работает если у меня :
PHP:
echo interpratePHP('[phр]include("1.php");[/phр] ...немного текст... [phр]include("2.php");[/phр]');
как сделать чтобы всё работал :) ???
Помогите пожалуйста
 
Не используйте preg_replace_callback, У этой функции есть проблемы с памятью при более менее больших обьемах текста.

Лучше уж preg_match_all + str_replace на каждый елемент.

После чего... я не знаю что вы пытаетесь сотворить но такое использование eval до добра не доведет, начиная от проблем с безопастностью и кончая проблемами с станными багами которые выходят в самых неожиданных местах...
 
Вот так сделал :
PHP:
<?
session_start();
include('inc/config.php');
mysql_select_db($db['name'],$connect);
include('inc/func.php');
//$myHtml = GetInfo::Html('1');
//$myHtml = base64_decode($myHtml['code']);
$str = 'Тест : [html]1[/html]<br />[html]3[/html]';
eval('?>'.html_entity_decode(str_replace('[/html]', '");echo $myHtml = base64_decode($myHtml["code"]);?>', str_replace('[html]', '<? $myHtml = GetInfo::Html("', $str))));
?>
Использую eval . Это безопасно ?
 
Назад
Сверху