|
|
|
| Всем доброй ночи. Помогите отфильтровать вот такую строку:
"fff/\\\ \ ааа68= quota . <br> <br/> lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`«»—•
|
Должно получится:
fff-ааа68-lol-яяявс12hEEllo0o
|
т.е. убираем любой символ или хтмл-сущность, который не принадлежит одному из 3-х алфавитов: укр., ру, енгл.
Надеюсь на Вашу помощь. | |
|
|
|
|
|
|
|
для: TetRiska
(31.03.2011 в 22:41)
| | Можно начать отталкиваться от следующего скрипта (украинский нужно добавить)
<?php
$text = ""fff/\\\ \ ааа68= quota . <br> <br/> lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`²⌡..";
// Сначала удаляем символы вида
$text = preg_replace("|&[a-z]+;|is", "", $text);
// Удаляем тэги
$text = preg_replace("|<[^>]+>|is", "", $text);
// Удлаяем все кроме цифр, букв и тире
$text = preg_replace("|[^-a-z0-9а-яё]+|is", "", $text);
echo htmlspecialchars($text);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.03.2011 в 22:59)
| | Ваш вариант несовсем нужное выдает на выходе...Прошу подправить этот.
$text = ""fff/\\\ \ ааа68= quota . <br> <br/> lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`«»—•";
$translit = array(
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","ґ"=>"g","д"=>"d",
"е"=>"e","є"=>"e","ё"=>"e","ж"=>"zh","з"=>"z","и"=>"i",
"і"=>"i","ї"=>"i","й"=>"i","к"=>"k","л"=>"l","м"=>"m","н"=>"n",
"о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u",
"ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch",
"ъ"=>"","ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", "ей"=>"yei"
);
$text = strip_tags($text);
$text = strtr(mb_strtolower($text,"UTF-8"),$translit);
$text = preg_replace("|&[a-z]+;|is", "", $text);
$text = preg_replace("|[^\w\d]|iu", "", $text);
echo $text;
|
Сперва я перевожу на латынь, а потом отсекаю все что не латынь. Но одно но - в конце появляется подчеркивание
fffaaa68quotalolyayayavs12heello0o_
|
и еще нужно ставить тире там где был пробел, результат должен быть таким:
fff-aaa68-quota-lol-yayayavs12heello0o
|
Надеюсь на Вашу помощь, заранее благодарен. | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 11:20)
| | Можно модифицировать скрипт следующим образом
<?php
$text = ""fff/\\\ \ ааа68= quota . <br> <br/> lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`²⌡..";
// Сначала удаляем символы вида
$text = preg_replace("|&[a-z#0-9]+;|is", "", $text);
// Удаляем тэги
$text = preg_replace("|<[^>]+>|is", "", $text);
// Удлаяем все кроме цифр, букв и тире
$text = preg_replace("|[^-a-z0-9а-яё ]+|is", "", $text);
// Заменяем пробелы на тире
$text = preg_replace("|\s+|is", "-", trim($text, "-"));
// Выполняем транслитацию
$translit = array(
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","ґ"=>"g","д"=>"d",
"е"=>"e","є"=>"e","ё"=>"e","ж"=>"zh","з"=>"z","и"=>"i",
"і"=>"i","ї"=>"i","й"=>"i","к"=>"k","л"=>"l","м"=>"m","н"=>"n",
"о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u",
"ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch",
"ъ"=>"","ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", "ей"=>"yei");
$text = strtr($text, $translit);
echo htmlspecialchars($text);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.04.2011 в 11:57)
| | ваш вариант хорош если:
$text = strtr(mb_strtolower($text,'utf-8'), $translit);
|
т.к. у меня утф-8, но если поставим строку такого характера:
$text = ""fff/\\\ \ ааа68= quota . •_ <br> <br/>`~1!2@3#4$5%6^7&8*9(0)_-)=+\|{[}]':;?.<, ^ {[ lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`«»—•";
|
все слетит
fff-aaa68-quota--1234567890--lol-yayayav12heello0o-»
|
| |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 13:09)
| | Для начала, функция strtr() не поддерживает многобайтовые кодировки - нужно искать какое-то другое решение. | |
|
|
|
|
|
|
|
для: cheops
(01.04.2011 в 13:29)
| | чем лучше утф-8 от обычной виндовс-1251? а то много нюансов возникает с ней (( | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 13:44)
| | Поддержкой нескольких языков на одном сайте. | |
|
|
|
|
|
|
|
для: cheops
(01.04.2011 в 14:00)
| | нам на сайте не нужна поддержка нескольких языков, но всеже, буду дальше парится с этой ф-цией по очистке строки :( | |
|
|
|
|
|
|
|
для: cheops
(01.04.2011 в 14:00)
| | :)
Промолчу лишь из одного уважения к Вам, cheops. Windows-1251 поддерживает даже суахили и узелковую письменность майя.
Я, к примеру, делаю MySQL на utf-8, a паги сайтов на win-1251 и НИКОГДА не было НИКАКИХ проблем.
Но молчу-молчу... | |
|
|
|
|
|
|
|
для: Deed
(01.04.2011 в 21:18)
| | Тем более мы все в прошлой теме обговорили. Да, utf-8 тяжелый и не удобный, особенно в PHP, разработчики которого грозятся поддержкой UTF-8 на уровне ядра уже лет эдак 7 и базу данных он раздувает в два раза, а увеличение размера таблицы с 500Мб до 1Гб на производительности отражается прилично. Однако, когда нужно одним движком сохранять в одной таблице текст на разных языках и корректно его потом извлекать из базы данных (пользуясь сортировкой по ORDER BY) ничего лучше UTF-8 нет. Мы и так и так сайты многоязычные сайты разрабатывали - с UTF-8 быстрее, удобнее, надежнее (не смотря на все но). | |
|
|
|
|
 31.4 Кб |
|
|
для: cheops
(01.04.2011 в 23:09)
| | Мы немного не поняли друг друга.
Ничто не мешает делать базы на utf-8, но страницы выводить в удобном и простом windows-1251.
Я где-то год назад сделал себе тестовый сайт на платном хостинге. Он был как бы лабораторной работой, когда я интереса ради решил освоить php.
На приведенной картинке я специально для Вас написал одну и ту же фразу на разных языках и вывел ее без проблем в комментарии. | |
|
|
|
|
|
|
|
для: Deed
(02.04.2011 в 00:03)
| | Это да, согласен. | |
|
|
|
|
|
|
|
для: TetRiska
(31.03.2011 в 22:41)
| |
<?
$text = ""fff/\\\ \ ааа68= quota . <br> <br/> lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`«»—•";
function unhtmlentities ($string) //функция, обратная htmlentities
{
$trans_tbl = get_html_translation_table (HTML_ENTITIES);
$trans_tbl = array_flip ($trans_tbl);
return strtr ($string, $trans_tbl);
}
$text=unhtmlentities($text);
$text=strip_tags($text);
$text=preg_replace("/(?<==).+?(?=\s)/","",$text);
$text=preg_replace(" /[^a-zA-Z\d\sа-яА-Я]+/i","",$text); //ибо \w включает в себя нижнее тире "_"
$text=preg_replace("/\s+/","-",$text);
echo $text; //fff-ааа68-lol-яяявс12hEEllo0o
?>
|
| |
|
|
|
|
|
|
|
для: Deed
(01.04.2011 в 12:48)
| | ваш пример мне выдал
fff-ааа68-lol-яяяв�12hEEllo0o«»—•
|
кодировка у меня страницы утф-8 | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 13:05)
| | Попробуйте
<?
$text=preg_replace(" /[^a-zA-Z\d\sа-яА-Я]+/Ui","",$text);
?>
|
| |
|
|
|
|
|
|
|
для: Deed
(01.04.2011 в 13:19)
| |
fff-ааа68-lol-яяяв�12hEEllo0o«»—•
|
| |
|
|
| |
|
|
|
|
для: Deed
(01.04.2011 в 13:44)
| | если поставить кодировку документа вин-1251 то будет как у тебя в результате, долбаный утф, как быть-то? | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 13:53)
| | в общем сделал очистку и еще ко всем вопрос - как бы можно упростить? а то пришлось делать массив, чтобы проставить тире вместо пробелов, которые были в строке
$text = ""fff/\\\ \ ааа68 9= quota . •_ <br> <br/>`~1!2@3#4$5%6^7&8*9(0)_-)=+\|{[}]':;?.<, ^ {[ lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`«»—•— — —– – -- - " —– – ?% % №";
$replace = array(
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","ґ"=>"g","д"=>"d",
"е"=>"e","є"=>"e","ё"=>"e","ж"=>"zh","з"=>"z","и"=>"i",
"і"=>"i","ї"=>"i","й"=>"i","к"=>"k","л"=>"l","м"=>"m","н"=>"n",
"о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u",
"ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch",
"ъ"=>"","ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", "ей"=>"yei"
);
$text = strip_tags($text);
$text = strtr(mb_strtolower($text,"UTF-8"),$replace);
$text = preg_replace("|&[a-z]+;|is", "", $text);
$text = preg_replace("|[^a-z0-9 ]|is", "", $text);
$mass = explode(" ",trim($text));
$count = count($mass);
$p = 0;
for($i=0;$i<$count;$i++){
$p++;
$add = ($p != $count)?"-":"";
if($mass[$i] != ''){
$text2 .= $mass[$i].$add;
}
}
echo $text2;
|
долгожданный результат
fff-aaa68-9-quota-1234567890-lol-yayayavs12heello0o
|
| |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 16:10)
| | Вот именно, "долбаный утф!"
И страницы тяжелее, и нюансов тьма. Никому не нужных нюансов!
Вообще-то, утф - это как привести девушку домой и не знать потом, что с ней делать. | |
|
|
|
|
|
|
|
для: Deed
(01.04.2011 в 18:51)
| | все, решил вопрос) | |
|
|
|
|
|
|
|
для: TetRiska
(02.04.2011 в 16:42)
| | С девушкой? :)
В принципе, нежадное U можно было воткнуть в каждую регулярку. Иногда чудеса случались. На машинном уровне. | |
|
|
|
|