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
Форумы портала PHP.SU :: Версия для печати :: preg_replace всех символов
Форумы портала PHP.SU » PHP » Регулярные выражения » preg_replace всех символов

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

1. filkeith - 26 Июля, 2011 - 12:28:14 - перейти к сообщению
Сколько гуглил так и не нашёл.
Суть вот в чем, пишу небольшой движок, и что бы огородиться надо фильтровать переменные из адресной строки, они всегда числовые у меня, и надо вырезать из неё абсолютно все символы и буквы.
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);

заранее спасибо
или кинте ссылку где описаны все возможные замены, сам я не нашёл Огорчение
2. Мелкий - 26 Июля, 2011 - 12:35:59 - перейти к сообщению
filkeith пишет:
они всегда числовые у меня

PHP:
скопировать код в буфер обмена
  1. if (! is_numeric($проверяемая_строка)) die("питаемся числами и выделяем байты");
3. DeepVarvar - 26 Июля, 2011 - 12:37:20 - перейти к сообщению
filkeith пишет:
всегда числовые у меня
Ну так и идите от обратного - не запрещайте, а разрешайте только цифры.
filkeith пишет:
символ ']' и '[' ибо preg_replace не понимает
Понимает - экранировать надо:
Спойлер (Отобразить)
4. filkeith - 26 Июля, 2011 - 12:40:12 - перейти к сообщению
Мелкий пишет:
if (! is_numeric($проверяемая_строка)) die("питаемся числами и выделяем байты");


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

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

это как? пока что я просто делаю intval но если взять значение переменной в скобки, то переменную сценарий не получает
5. DeepVarvar - 26 Июля, 2011 - 12:47:13 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match("#(\d)+#",$_GET['page'],$match);
  2. $page = $match[1];

(Добавление)
Не проверял
6. Мелкий - 26 Июля, 2011 - 12:50:00 - перейти к сообщению
filkeith пишет:
но хотелось бы что бы было например так:

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

7. DeepVarvar - 26 Июля, 2011 - 12:50:46 - перейти к сообщению
Теперь проверил:
PHP:
скопировать код в буфер обмена
  1. preg_match("#(\d+)#",$_GET['page'],$match);
  2. $page = ($match[1] != "") ? $match[1] : 1;
  3. echo $page;

(Добавление)
Кстати к пагинатору хорошая проверка Закатив глазки
8. filkeith - 26 Июля, 2011 - 12:56:32 - перейти к сообщению
Мелкий пишет:
ИМХО, конечно, но пользователь руками числовые урлы набирать не будет, значит это целенаправленное действие и вполне логично отвечать 404.

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

DeepVarvar
спасибо, вроде всё работает
9. Давит - 26 Июля, 2011 - 13:19:28 - перейти к сообщению
filkeith пишет:
если есть ссылка page.php?y=1, то даже при изменении её на page.php?y=(1) или page.php?y=1or уиралось всё лишнее и получалос page.php?y=1


$_GET['y'] = (int)$_GET['y'];
10. filkeith - 26 Июля, 2011 - 14:01:04 - перейти к сообщению
Давит пишет:
$_GET['y'] = (int)$_GET['y'];

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

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


результат
-538322976
11. illy - 26 Июля, 2011 - 16:15: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);
12. DeepVarvar - 26 Июля, 2011 - 17:51:40 - перейти к сообщению
illy пишет:
'/[~\<\`\!\@\"\'\#\¹\$................
Жесть...
13. Давит - 26 Июля, 2011 - 20:37:08 - перейти к сообщению
Цитата:
PHP:
скопировать код в буфер обмена
  1.   $y=12346578912;
  2.       $y = (int)$y;
  3.       echo $y;

результат
-538322976

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

результат
0
почему?
14. filkeith - 26 Июля, 2011 - 21:50:08 - перейти к сообщению
раз уж здесь воспользусю возможностью. Так жея думаю всё делается 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">
ну и в итоге в тексте появлялась картинка, как так сделать? Однако
ссылка может быть любой длины
15. Lemar - 09 Июня, 2014 - 15:13:08 - перейти к сообщению
filkeith пишет:
они всегда числовые у меня

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

PHP:
скопировать код в буфер обмена
  1.  
  2. $text = 'abc12_@3';
  3. $text = preg_replace('/[^0-9\s]/','',$text);
  4. echo $text; // Должно выдать 123
  5.  

 

Powered by ExBB FM 1.0 RC1