Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: preg_replace всех символов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: как описать то, что надо заменить?
filkeith
Отправлено: 26 Июля, 2011 - 12:28:14
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Сколько гуглил так и не нашёл.
Суть вот в чем, пишу небольшой движок, и что бы огородиться надо фильтровать переменные из адресной строки, они всегда числовые у меня, и надо вырезать из неё абсолютно все символы и буквы.
CODE (htmlphp):
скопировать код в буфер обмена
  1. $simbols = array (какие символы вырезаем);
  2. $message=preg_replace($simbols,"",$message);

Вот что написать в скобка в массиве? ясное дело [a-z],[а-я] а как описать символы? если я просто пишу:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $simbols = array ("'[a-z]'","'('","')'","'''","'"'","'-'","'\'","'/'","'*'","'$'","'@'","'%'","'^'","'&'","'_'","'+'","'='","'|'",);

конечно всё не работает, как описать все эти символы в массиве?

а ещё очеь интересно как мне заменить например '[b]' на '</b>', символ ']' и '[' ибо preg_replace не понимает если я пишу:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $simbols = array ("'[b]'","'[/b]'","'[i]'","'[/i]'","'[spoiler]'","'[/spoiler]'","'[strike]'","'[/strike]'");
  2. $replace = array ("<b>","</b>","<i>","</i>","<div class='spoiler'>","</div>","<strike>","</strike>");
  3. $this->message=preg_replace($simbols,$replace,$message);

заранее спасибо
или кинте ссылку где описаны все возможные замены, сам я не нашёл Огорчение

(Отредактировано автором: 26 Июля, 2011 - 12:35:51)

 
 Top
Мелкий Супермодератор
Отправлено: 26 Июля, 2011 - 12:35:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




filkeith пишет:
они всегда числовые у меня

PHP:
скопировать код в буфер обмена
  1. if (! is_numeric($проверяемая_строка)) die("питаемся числами и выделяем байты");


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Июля, 2011 - 12:37:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




filkeith пишет:
всегда числовые у меня
Ну так и идите от обратного - не запрещайте, а разрешайте только цифры.
filkeith пишет:
символ ']' и '[' ибо preg_replace не понимает
Понимает - экранировать надо:
Спойлер (Отобразить)
 
 Top
filkeith
Отправлено: 26 Июля, 2011 - 12:40:12
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Мелкий пишет:
if (! is_numeric($проверяемая_строка)) die("питаемся числами и выделяем байты");


это как вариант, но хотелось бы что бы было например так:
если есть ссылка page.php?y=1, то даже при изменении её на page.php?y=(1) или page.php?y=1or уиралось всё лишнее и получалос page.php?y=1

DeepVarvar пишет:
Ну так и идите от обратного - не запрещайте, а разрешайте только цифры.

это как? пока что я просто делаю intval но если взять значение переменной в скобки, то переменную сценарий не получает

(Отредактировано автором: 26 Июля, 2011 - 12:45:25)

 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Июля, 2011 - 12:47:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match("#(\d)+#",$_GET['page'],$match);
  2. $page = $match[1];

(Добавление)
Не проверял
 
 Top
Мелкий Супермодератор
Отправлено: 26 Июля, 2011 - 12:50:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




filkeith пишет:
но хотелось бы что бы было например так:

ИМХО, конечно, но пользователь руками числовые урлы набирать не будет, значит это целенаправленное действие и вполне логично отвечать 404.



-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Июля, 2011 - 12:50:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Теперь проверил:
PHP:
скопировать код в буфер обмена
  1. preg_match("#(\d+)#",$_GET['page'],$match);
  2. $page = ($match[1] != "") ? $match[1] : 1;
  3. echo $page;

(Добавление)
Кстати к пагинатору хорошая проверка Закатив глазки
 
 Top
filkeith
Отправлено: 26 Июля, 2011 - 12:56:32
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Мелкий пишет:
ИМХО, конечно, но пользователь руками числовые урлы набирать не будет, значит это целенаправленное действие и вполне логично отвечать 404.

так мне не надо показывать ошибку, мне нужно выполнить действие.

DeepVarvar
спасибо, вроде всё работает
 
 Top
Давит
Отправлено: 26 Июля, 2011 - 13:19:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2011  


Помог: 2 раз(а)




filkeith пишет:
если есть ссылка page.php?y=1, то даже при изменении её на page.php?y=(1) или page.php?y=1or уиралось всё лишнее и получалос page.php?y=1


$_GET['y'] = (int)$_GET['y'];
 
 Top
filkeith
Отправлено: 26 Июля, 2011 - 14:01:04
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Давит пишет:
$_GET['y'] = (int)$_GET['y'];

Если переменная $_GET['y'] длинее чем 10 знаков, то ответом будет отрицательное число неясное.

PHP:
скопировать код в буфер обмена
  1. $y=12346578912;
  2. $y = (int)$y;
  3. echo $y;


результат
-538322976

(Отредактировано автором: 26 Июля, 2011 - 14:17:28)

 
 Top
illy
Отправлено: 26 Июля, 2011 - 16:15:28
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




'/[~\<\`\!\@\"\'\#\¹\$\;\%\^\:\&\?\*\(\)\+\=\\/\.\,]/'

'/[^(\w)|(\x7F-\xFF)|(\s)]/'

$com=preg_replace('/\< ?b ?r ?>/','<br>',$com);
$com=preg_replace('/\[ ?b ?] ?/', '<b>', $com);
$com=preg_replace('/\[ ?\/ ?b ?]/', '</b>', $com);
$com=preg_replace('/\[ ?i ?] ?/', '<i>', $com);
$com=preg_replace('/\[ ?\/ ?i ?]/', '</i>', $com);
$com=preg_replace('/\[ ?u ?] ?/', '<u>', $com);
$com=preg_replace('/\[ ?\/ ?u ?]/', '</u>', $com);
$com=preg_replace('/\[ ?q ?] ?/', '<div class=quot>', $com);
$com=preg_replace('/\[ ?\/ ?q ?](<br>)?/', '</div>', $com);

$com=preg_replace('/(\[url=)(.*)( )(.*)( )(.*)( )(.*)\](.*)(\[ ?\/ ?u ?r ?l ?])/','[url=\2\4\6\8]\9[/url]',$com);
$com=preg_replace('/(\[url=)(.*)( )(.*)( )(.*)\](.*)(\[ ?\/ ?u ?r ?l ?])/','[url=\2\4\6]\7[/url]',$com);
$com=preg_replace('/(\[url=)(.*)( )(.*)( )\](.*)(\[ ?\/ ?u ?r ?l ?])/','[url=\2\4]\6[/url]',$com);
$com=preg_replace('/(\[url=)(.*)( )(.*)\](.*)(\[ ?\/ ?u ?r ?l ?])/','[url=\2\4]\5[/url]',$com);
$com=preg_replace('/(\[url=)(.*)\](.*)(\[ ?\/ ?u ?r ?l ?])/','[url=\2]\3[/url]',$com);
$com=preg_replace('/ \[\/url]/','[/url]',$com);


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Июля, 2011 - 17:51:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




illy пишет:
'/[~\<\`\!\@\"\'\#\¹\$................
Жесть...
 
 Top
Давит
Отправлено: 26 Июля, 2011 - 20:37:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2011  


Помог: 2 раз(а)




Цитата:
PHP:
скопировать код в буфер обмена
  1.   $y=12346578912;
  2.       $y = (int)$y;
  3.       echo $y;

результат
-538322976

а когда
PHP:
скопировать код в буфер обмена
  1. $y=1234657891244444444444444444444;

результат
0
почему?

(Отредактировано автором: 26 Июля, 2011 - 20:39:32)

 
 Top
filkeith
Отправлено: 26 Июля, 2011 - 21:50:08
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




раз уж здесь воспользусю возможностью. Так жея думаю всё делается preg_replace'ом, передаем в перменную строку типа
PHP:
скопировать код в буфер обмена
  1. $a='тратата вот те на http:\\site.com\img\gaga.jpg и прочий текст';

надо что бы он подменил ссылку
http:\\site.com\img\gaga.jpg
на
<img src="http:\\site.com\img\gaga.jpg">
ну и в итоге в тексте появлялась картинка, как так сделать? Однако
ссылка может быть любой длины

(Отредактировано автором: 27 Июля, 2011 - 13:10:54)

 
 Top
Lemar
Отправлено: 09 Июня, 2014 - 15:13:08
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июнь 2014  
Откуда: Днепропетровск


Помог: 0 раз(а)




filkeith пишет:
они всегда числовые у меня

Если нужны только числа, можно "вырезать все, кроме указанного":

PHP:
скопировать код в буфер обмена
  1.  
  2. $text = 'abc12_@3';
  3. $text = preg_replace('/[^0-9\s]/','',$text);
  4. echo $text; // Должно выдать 123
  5.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB