Филтриране на специални символи в ключови думи от търсачка

yuspasov

Registered
С preg_replace не става, защото искам да може да чисти и кирилица от скоби, точки, въпросителни, точки запетаи и т.н. символи, с които може евентуално да се атакува сайта.
 
Ето ти 1 прост пример, ти вече си позволи/забрани символите които искаш

PHP:
preg_match('/^[a-zA-Z0-9_\.]+$/', $string)
 
Както казах този вариант на preg_replace не върши работа, защото през него не минава кирилицата. :)
 
минава , просто трябва да си структурираш регуларния израз правилно.

така поне мисля,че ще стане

ето ти пример

preg_match("/[a-zа-я0-9]/iu", $string, $matches);

приема малки и големи букви + Кирилица
 
yuspasov каза:
Както казах този вариант на preg_replace не върши работа, защото през него не минава кирилицата. :)

Първо това не е вяриянт на preg_replace. Между preg_replace и preg_match има голяма разлика. Научи се да ползваш документацията.

critrate каза:
минава , просто трябва да си структурираш регуларния израз правилно.

така поне мисля,че ще стане

ето ти пример

preg_match("/[a-zа-я0-9]/iu", $string, $matches);

приема малки и големи букви + Кирилица

Тук a-zа-я0-9 къде пускаш големи букви ? че не ми стана ясно

PHP:
preg_match('/^[a-zA-Zа-яА-Я0-9_\.]+$/', $string);

Така би трябвало да минава и кирлица и латиница!
 
@kikity няма значение, че са различни концепцията им е една и съща, а именно регилярни изрази, което имаше предвид автора.
А относно кирилицата, и двамата сте дали грешни варианти.
За кирилица се използва \W в израза. Т.е., кирилицата не се засича като нормална дума.
 
TryMe каза:
@kikity няма значение, че са различни концепцията им е една и съща, а именно регилярни изрази, което имаше предвид автора.
А относно кирилицата, и двамата сте дали грешни варианти.
За кирилица се използва \W в израза. Т.е., кирилицата не се засича като нормална дума.

\w израза е все едно да използваш a-zA-Z0-9_ просто съкратен вариянт както и да е
 
Да ме видя да давам малко w? Аз добре знам кое какво прави и я сега пробвай \W (главно w). В регулярните изрази това : а-яА-Я е грешно. Няма кирилица. Кирилицата отива към знаците различни от латиница, затова се слага \W, което приема всичко, което не е дума ;)
 
TryMe каза:
Да ме видя да давам малко w? Аз добре знам кое какво прави и я сега пробвай \W (главно w). В регулярните изрази това : а-яА-Я е грешно. Няма кирилица. Кирилицата отива към знаците различни от латиница, затова се слага \W, което приема всичко, което не е дума ;)
Ми можеше да дадеш пример вместо така да се дърпаш.
 
critrate каза:
TryMe каза:
Да ме видя да давам малко w? Аз добре знам кое какво прави и я сега пробвай \W (главно w). В регулярните изрази това : а-яА-Я е грешно. Няма кирилица. Кирилицата отива към знаците различни от латиница, затова се слага \W, което приема всичко, което не е дума ;)
Ми можеше да дадеш пример вместо така да се дърпаш.


Не се дърпам, просто писах от телефона.


Ето ти пример:

PHP:
$string = preg_replace("#(\W)+#", "", $string);

Ще замени: кирилица, и всякакви знаци без долна черта.

http://gskinner.com/RegExr/?32fu5
 
yuspasov каза:
Ама идеята е да оставя кирилицата и латиницата и да маха само символите
както ти го дадоха остави само a-z а-я 0-9
за позволени символи...
 
Хайде дерзайте:

PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");

$string = "асд Сад сЙФдк asd 123 !@#$%^&*()_+-=/.,<>?;':\"'[]{}\|";
preg_match("#[a-z\p{Cyrillic}\s]+#iu", $string, $matches);

print_r($matches);
?>

И следващия път да знаете, че кирилица не се мачва с а-яА-Я
 

Back
Горе