Страница 1 из 2

php масивы и экранированеи переменных

Добавлено: 2008-06-29 13:51:21
ProFTP
есть масив:

Код: Выделить всё

		$codes = array(
.....................
			array(
				'tag' => 'url',
				'type' => 'unparsed_content',
				'content' => '<a href="http:///goo.php?url=$1" target="_blank">$1 </a>',
				'validate' => create_function('&$tag, &$data, $disabled', '$data = strtr($data, array(\'<br />\' => \'\'));'),
			),
			array(
				'tag' => 'url',
				'type' => 'unparsed_equals',
				'before' => '<a href="http://?url=$1" target="_blank">',
				'after' => '</a>',
				'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
				'disabled_after' => ' ($1)',
 ),
......................
);
вот нужно сделать сроку динамическую

Код: Выделить всё

				'content' => '<a href="http:///goo.php?url=$1" target="_blank">$1 </a>',
$1 - это url.

то есть примерно так:

Код: Выделить всё

if ((strstr($1, 'mydomen.com') && (strstr($1, 'lissyara.su')) ) {

$dop= "'<a href="$1"  target="_blank">$1 </a>',"

elseif ($context['user']['is_admin']){
$dop= "'<a href="$1"  target="_blank">$1 </a>',"
}
else {
<a href="http://./goo.php?url=$1" target="_blank">$1 </a>'
}
он ругаеться всегда!!! как работать с переменной $1? на перле легко очень это сделать, в данном случае я не нашел как реализовать, даже не знаю что искать?

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 14:13:36
zg
ProFTP писал(а): как работать с переменной $1?
никак, да и зачем? то что ты пытаешься сделать реализуется гораздо проще.
ProFTP писал(а):вот нужно сделать сроку динамически
<?=...?> чем не устаривает? ну... максимум printf, но только не echo и не двойные кавычки... потому как ни тем ни тем почему-то не умеют пользоваться...
ProFTP писал(а):то есть примерно так:
скажи, что есть и что нужно получить, так проще будет. Тот массив, который ты привёл абсолютно бессмысленный, либо я чего-то не понимаю.

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 14:40:45
ProFTP
не работает оно, php строгий язык
ну как эту строку представить??

Код: Выделить всё

       
              'content' => '<a href="http:///goo.php?url=$1" target="_blank">$1 </a>',

я патался

Код: Выделить всё

  'content' => '<a href="$dd" target="_blank">$1 </a>',

Код: Выделить всё

$dd = 'http:///goo.php?url=$1';

не работает, я правильно написал? почему?

и ругаеться на вот это

Код: Выделить всё

(strstr($1, 'mydomen.com')
пишет что $1 не определена

<?=...?> чем не устаривает? ну... максимум printf, но только не echo и не двойные кавычки... потому как ни тем ни тем почему-то не умеют пользоваться...
что это?

по каким причинам не работает, может надо "обяву" сделать?

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 17:54:24
zg
ProFTP писал(а):не работает оно, php строгий язык
ну как эту строку представить??

Код: Выделить всё

$str = '<a href="http:///goo.php?url=$1" target="_blank">$1</a>';
echo strtr($str, array('$1'=>'some info'));
===========
<a href="http:///goo.php?url=some info" target="_blank">some info</a>
ProFTP писал(а):не работает, я правильно написал? почему?
$dd это переменная, а не функция, тут нет скрытых функций по-умолчанию.
ProFTP писал(а):что это?
то, чего нет в перле и никогда не будет - расширение html стандратными средствами пхп, соркащённый вывод - <?echo ...?>
ProFTP писал(а):пишет что $1 не определена
переменная не может начинаться с цифры, таких переменных нет впринципе, они есть только в специальных функциях типа preg_match и то не относться никак к пхп.

Код: Выделить всё

echo $1;
=====
Parse error:  syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$'

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 17:57:41
zg
очень желательно перед использованием пхп ознакомиться с http://php.net и взять от туда мануал. Первые несколько глав подробнейшим образом расписывают базовые принципы работы с пхп.

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 18:37:52
ProFTP
zg писал(а):очень желательно перед использованием пхп ознакомиться с http://php.net и взять от туда мануал. Первые несколько глав подробнейшим образом расписывают базовые принципы работы с пхп.
я там был!

но вот я примел к этому виду
$1 используеться в этом движке как ссылка сайта на котором работает движок!!!

вот я не могу сделать вот это:

$str0, $str1 вставляються в масив движка, и для работы, и для экранирование html тэгов, я хочу выключить внешние ссылки!!

Код: Выделить всё

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /usr/l/Subs.php on line 1108 

Код: Выделить всё

$ff = 'echo $1'
не помогает :cry:

Код: Выделить всё

$ff == $1;

Код: Выделить всё

if ( strtr($1, 'domenl.org.ua'))   {
$str0 = '<a href="$1" target="_blank">$1</a>';
$str1 = '<a href="$1" target="_blank">';
}

else {
$str0 = '<a href="http://w/goo.php?url=$1" target="_blank">$1</a>';
$str1 = '<a href="http://wo/goo.php?url=$1" target="_blank">';
}

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:20:05
zg
ProFTP писал(а):не помогает
ну во-первых, что за движок, во-вторых ты используешь PrettyUrls?
ProFTP писал(а):я там был!
мало быть, надо ещё и информацию черпать.
ProFTP писал(а):Код:
код ни о чём не говорит, в нём не действия

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:24:33
ProFTP
zg писал(а):
ProFTP писал(а):не помогает
ну во-первых, что за движок, во-вторых ты используешь PrettyUrls?
это smf,
там много окода много функций

на perl можно было вот так

Код: Выделить всё

$sdfsdf=S1;
а почему здесь нельзя так?

нет не PrettyUrls, а Subs.php я использую фунцию которая работает с сообщениями и публикациями... ( ЗЫ ну просто ссылку же он выдает, экранирует все остальное)
ProFTP писал(а):я там был!
мало быть, надо ещё и информацию черпать.
а что именно? я обьяву не вижу в коде...
ProFTP писал(а):Код:
код ни о чём не говорит, в нём не действия[/quote]

ладно, если нельзя то ладно... спасибо :drinks:

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:36:08
zg
ProFTP писал(а):нет не PrettyUrls, я использую фунцию которая работает с сообщениями и публикациями
но ошибка именно в этом модуле для smf http://custom.simplemachines.org/mods/index.php?mod=636
ProFTP писал(а):на perl можно было вот так
Код:$sdfsdf=S1;
и на пхп можно так

Код: Выделить всё

echo $sdfsdf=S1;
=========
S1
переменной $sdfsdf присвоится значение константы S1, которая если не объявлена, то по умолчанию её имя, и передастся процедуре echo, которая выведет это значение.
ProFTP писал(а):а что именно? я обьяву не вижу в коде...
хм, а кто сказал, что она там в явном виде?

чего ты в итоге хочешь добиться? может быть это уже давно сделано?

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:38:57
zg
ProFTP писал(а):ладно, если нельзя то ладно... спасибо :drinks:
форум это система, а к любой системе нужен системный подход, скорее всего нужно просто найти конфиг и чего-нить подправить или дописать.

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:41:39
ProFTP
zg писал(а):
ProFTP писал(а):ладно, если нельзя то ладно... спасибо :drinks:
форум это система, а к любой системе нужен системный подход, скорее всего нужно просто найти конфиг и чего-нить подправить или дописать.
ругается на эту строку

Код: Выделить всё

echo $sdfsdf=S1;

Код: Выделить всё

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /usr/local/www/l/Sources/Subs.php on line 1107
мод хотел написать, в данном случае чтобы выключить внешние ссылки, но внутрение оставить и для пользователей зарегистрированных оставить так и внутрениие, так и внешние!

такого нету, оффициально ответили на форуме

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:52:01
zg
ProFTP писал(а):мод хотел написать, в данном случае чтобы выключить внешние ссылки, такого нету, оффициально ответили на форуме
а.. ну тогда надо найти то место, где идёт подсветка ссылки, вырубить подсветку всех ссылок, а потом уже вырубить только внешние. PrettyUrls как раз занимется этой фигнёй, только у тебя странная версия, но можешь и её лаботамировать.

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 19:57:48
ProFTP
$1 это и есть ссылка в сообщении, в оригинале в масиве записано так:

Код: Выделить всё

			'content' => '<a href= "$1"  target="_blank">$1</a>',

Код: Выделить всё

 $codes = array(
.....................
         array(
            'tag' => 'url',
            'type' => 'unparsed_content',
          'content' => ' '<a href= "$1"  target="_blank">$1</a>',
            'validate' => create_function('&$tag, &$data, $disabled', '$data = strtr($data, array(\'<br />\' => \'\'));'),
         ),
         array(
            'tag' => 'url',
            'type' => 'unparsed_equals',
            'before' => '<a href="$1" target="_blank">',
            'after' => '</a>',
            'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
            'disabled_after' => ' ($1)',
),
......................
);
в общем ладно я прошу на оффициальном форуме, но там редко отвичают...

Re: php масивы и экранированеи переменных

Добавлено: 2008-06-29 20:07:34
zg
ProFTP писал(а):$1 это и есть ссылка в сообщении, в оригинале в масиве записано так:
понимаешь в чём трабла - пока нет функции, которая это всё обрабатывает, этот массив пустое место, тут нет никакой полезной информации. Если приведёшь функцию, которой это всё скармливают, то уже можно будет о чём-то говорить.

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-30 11:56:06
ADRE
не надо в массивах скобки одинарные ставить, если внутри переменную хочешь заместить ( ' ) - они все что внутри них приравнивают к строке, если не регулярное выражение.... пользуйся в массивах двойными кавычками ( " )....

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-30 12:00:07
ProFTP
спасибо, только это проблему не решает описанную в этой теме...

url храниться в этой переменной $1

Код: Выделить всё

if ( strtr($1, 'domenl.org.ua'))   {
$str0 = '<a href="$1" target="_blank">$1</a>';
$str1 = '<a href="$1" target="_blank">';
}

else {
$str0 = '<a href="http://w/goo.php?url=$1" target="_blank">$1</a>';
$str1 = '<a href="http://wo/goo.php?url=$1" target="_blank">';
}
не работает

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-30 12:03:19
ADRE

Код: Выделить всё

$str0 = '<a href="$1" target="_blank">$1</a>'
- эта шняга у тебя воспринмается как текст, поменяй скобки ' на " и пройдет...., только остальные не забудь экранировать...

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-30 12:06:44
ProFTP
пробелема была все равно не в этом, не знаю где, может быть в масиве, оно ругаеться на это строку:

Код: Выделить всё

if ( strtr($1, 'domenl.org.ua'))   {
а сам код работает, такой:

Код: Выделить всё

$str0 = '<a href="http://w/goo.php?url=$1" target="_blank">$1</a>';
$str1 = '<a href="http://wo/goo.php?url=$1" target="_blank">';
в принципе я забил... (но все равно не понятно) там код где-то 200000 строк, икать продожение или "функцию которая обрабатывает" не реально

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-30 14:42:35
MAK
ProFTP писал(а):

Код: Выделить всё

$str0 = '<a href="http://w/goo.php?url=$1" target="_blank">$1</a>';
$str1 = '<a href="http://wo/goo.php?url=$1" target="_blank">';
В пхп низя имена переменных начинать на цифры.
В одинарных кавычках переменные не подставляют свои значения.
Может здесь $1 заменяется str_replace?
Но лучше - быстрее выкиньте этот "движок". :)

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-30 16:25:39
zg
MAK писал(а):Но лучше - быстрее выкиньте этот "движок". :)
это да -)) +1

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-31 6:28:33
ADRE
zg писал(а):
MAK писал(а):Но лучше - быстрее выкиньте этот "движок". :)
это да -)) +1
а что за опасный мега движок у которого всего 2000 строк?

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-31 8:05:51
MAK
прошу заметить )
ProFTP писал(а):там код где-то 200000 строк

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-31 8:10:21
ProFTP
smf
MAK писал(а):
ProFTP писал(а):

Код: Выделить всё

$str0 = '<a href="http://w/goo.php?url=$1" target="_blank">$1</a>';
$str1 = '<a href="http://wo/goo.php?url=$1" target="_blank">';
В пхп низя имена переменных начинать на цифры.
В одинарных кавычках переменные не подставляют свои значения.
Может здесь $1 заменяется str_replace?
Но лучше - быстрее выкиньте этот "движок". :)
$str0 эти переменные я сам поставил, работает - пускай работает...

что значит "заменяется"? попробовать if ( str_replace($1, 'domenl.org.ua')) {

поробую тогда str_replace, проблема этой переменной навреное $1, она где-то переопределяется...

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-31 8:21:10
zg
ADRE писал(а):а что за опасный мега движок у которого всего 2000 строк?
для дырки хватит и 10 строк :smile: движок дырявый однозначно

Такой код
ProFTP писал(а):if ( strtr($1, 'domenl.org.ua'))   {
будет работать только при одном раскладе - eval.
А eval - всегда самая серьёзная угроза безопасности, так как очень трудно себя обезопасить на все 100%.

Профессиональные программеры двести раз продумают об использовании таких кострукций, а потом всё равно откажутся, как бы соблазнительно это не выглядело.

Re: php масивы и экранированеи переменных

Добавлено: 2008-10-31 15:24:35
MAK
ProFTP писал(а):$str0 эти переменные я сам поставил, работает - пускай работает...
От сюда можно поподробней. при том, что вы писали

Код: Выделить всё

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /usr/l/Subs.php on line 1108
Может действительно у вас все работает. :)
ProFTP писал(а):проблема этой переменной навреное $1, она где-то переопределяется...
Еще раз повторяю, в php нельзя начинать имена переменных с цифр!
Сейчас пойду посмотрю в какой главе об этом говорят.
Во втором абзаце раздела про переменные! Только буква или подчеркивание! Все.