Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

  • Закрытая тема Тема закрыта

Парсинг строки-шаблона

#1 Дилетант

Дилетант
  • Пользователь
  • 53 сообщений
  • Репутация: 0
0

Отправлено 11 Ноябрь 2010 - 15:43

Здравствуйте, товарищи специалисты.
Помогите в очередной раз дилетанту.

Когда на форуме человек вводит текст с url например

Адрес ссылки: http://www.noninin.ru/

то обработчик делает с ним так:

$text = preg_replace("/(\s+)(http:\/\/[^\s\"'\[,!]+)([\s\"'\[,!]+)/is",
"$1 <noindex><a href=$2 rel=nofollow target=_blank>$2</a></noindex> $3",$text);
где в $2 - урл и генерится код

Адрес ссылки: <noindex><a href=http://www.noninin.ru/ rel=nofollow target=_blank>http://www.noninin.ru/</a></noindex>

захотелось url скрывать и я решил делать вот так:

$text = preg_replace("/(\s+)(http:\/\/[^\s\"'\[,!]+)([\s\"'\[,!]+)/is",  
"$1 <a target=_blank href=\"http://www.mysite.ru/follow.php?url=".base64_encode($2)."\">$2</a> $3",   $text);
Т.е. я хочу кодировать адрес ссылки, а потом в follow.php раскодируя выводить.

Но выдается ошибка:
[error] PHP Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in parser.php on line 20

Помогите пожалуйста с кодом. Тут по аналогии с http://www.masterweb...-vmesto-stroki/ похоже. Но мне не справиться.

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Разбор стандартного шаблона Joomla
  2. Парсинг строки: Как использовать вместо строки-шаблона функцию
  3. Сайты-сборники шаблонов
  4. Разработка шаблона для сайта
  5. Выбираю шаблоны OpenCart,потребуется парсинг

#2 thoth666

thoth666
  • Пользователь
  • 14 сообщений
  • Репутация: 0

Отправлено 12 Ноябрь 2010 - 10:35

Дилетант, проблема в base64_encode($2)
здесь эта конструкция работать не будет
да и зачем вам base64_encode?


ставьте сразу

$text = preg_replace("/(\s+)(http:\/\/[^\s\"'\[,!]+)([\s\"'\[,!]+)/is",
"$1 <a target=_blank href=\"http://www.mysite.ru/follow.php?url=$1\">$2</a> $3", $text);

а follow.php закройте в robots.txt от индексации.
  • 0

#3 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 12 Ноябрь 2010 - 10:56

thoth666, напишите закрытие в robots.txt Если вам не трудно, конечно.

У меня сейчас заточено под декодирование

<?php
$url = ( isset($_GET['url']) and $_GET['url'] ) ? base64_decode($_GET['url']) : '';
if ($url) { header ("Location: $url"); }
?>

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


Написал Disallow: /follow.php* вроде как бы работает.
  • 0

#4 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 12 Ноябрь 2010 - 11:53

Спасибо всем. Тему можно закрыть.
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Ноябрь 2010 - 13:12

Дилетант, напоследок,
1) Почитайте http://php.su/functions/?preg_replace

Модификатор /e меняет поведение функции preg_replace() таким образом, что параметр replacement после выполнения необходимых подстановок интерпретируется как PHP-код и только после этого используется для замены. Используя данный модификатор, будьте внимательны: параметр replacement должен содержать корректный PHP-код, в противном случае в строке, содержащей вызов функции preg_replace(), возникнет ошибка синтаксиса.

<?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>

2) Так же можно создавать функции на лету и использовать карманы как массив параметра данной функции: create_function()
Тему закрываю.
  • 0


Оформление форума – IPBSkins.ru