Как можно сделать что бы не повторялись пробелы в url в данный момент у меня такая система К примеру: PHP: $title = "Пробелы - в url"; Переводим кириллицу в латиницу PHP: function translit($text) { $translit = array( "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g", "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i", "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n", "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t", "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch", "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"", "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b", "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j", "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r", "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h", "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y", "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", "A"=>"a","B"=>"b","C"=>"c","D"=>"d","E"=>"e", "F"=>"f","G"=>"g","H"=>"h","I"=>"i","J"=>"j", "K"=>"k","L"=>"l","M"=>"m","N"=>"n","O"=>"o", "P"=>"p","Q"=>"q","R"=>"r","S"=>"s","T"=>"t", "U"=>"u","V"=>"v","W"=>"w","X"=>"x","Y"=>"y", "Z"=>"z"," "=>"-","-"=>"","«"=>"","»"=>"","`"=>"", "!"=>"","@"=>"","#"=>"","№"=>"","$"=>"", "%"=>"","^"=>"","&"=>"","*"=>"","("=>"", ")"=>"","_"=>"","="=>"","+"=>"", "."=>"",","=>"","|"=>"",":"=>"", ";"=>"" ); return strtr($text,$translit); } Вывожу title PHP: translit($title) И выходит в url - probelyi--v-url Как сделать что бы не повторялись тире а было - probelyi-v-url
функция транслит твоя смысл теряет судя по названию, ты либо транслируешь либо меняешь символы нужные тебе
PHP: $title = "Пробелы - в url"; В общем мне из $title нужно получить вот такой url - probelyi-v-url Как можно такое реализовать ?
ясно PHP: echo str_replace ( [ ' - ', ' ' ], [ '-', '-' ], 'Пробелы - в url Пробелы - в url Пробелы - в url' );
Не совсем то, если в $title="Пробелы%$! - в url 213"; нужно что бы символы удалялись и сколько бы пробелов между словами и цифрами не было что бы выходил только 1 тире - probelyi-v-url-213... Вот как на этом форуме тут такая же система с url
Я не прошу вас это за меня делать, я изначально задавал вопрос что бы подтолкнули в правильном направлении, так то и через translit ща работает но если поставить 10 пробелов то он выдает 10 тире а мне надо что бы всегда вставлял между только 1 тире...
PHP: <?php function generate_alias($name = '') { $name = trim($name); if (empty($name)) { return false; } $rus = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' ]; $lat = ['a', 'b', 'v', 'g', 'd', 'e', 'yo', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'shch', 'y', 'y', 'y', 'e', 'yu', 'ya']; $pattern = ['/[\pP\pS\s]/u', '/[-]+/', '/[-]+$/']; $replace = ['-', '-', '']; $name = preg_replace($pattern, $replace, $name); return str_replace($rus, $lat, mb_strtolower($name, 'utf-8')); } echo generate_alias(' очень много пробелов и лишних !"№;%:?*()_+= знаков препинания,,,, '); // ocheny-mnogo-probelov-i-lishnih-znakov-prepinaniya
Спасибо! работает как надо, только выдавало ошибку "Parse error: syntax error, unexpected '['" сменил [] на array() и теперь работает. PHP: function generate_alias($name = '') { $name = trim($name); if (empty($name)) { return false; } $rus = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' ); $lat = array('a', 'b', 'v', 'g', 'd', 'e', 'yo', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'shch', 'y', 'y', 'y', 'e', 'yu', 'ya'); $pattern = array('/[\pP\pS\s]/u', '/[-]+/', '/[-]+$/'); $replace = array('-', '-', ''); $name = preg_replace($pattern, $replace, $name); return str_replace($rus, $lat, mb_strtolower($name, 'utf-8')); }
Это плохо. В данном случае, плохо не то, что ошибку выдало, а то что у вас очень старая версия PHP, которая уже не поддерживается.
все пробелы заменить на палки, потом все палки по две менять на одну пока больше не останется палок по две. =) https://php.ru/manual/function.strpos.html важно знать, что может вернуть ноль, но это не будет фалс, а будет начало строки. Потом обрезать палки через трим, чтобы не было палок в начале и в конце строки.