За последние 24 часа нас посетили 30462 программиста и 1806 роботов. Сейчас ищут 859 программистов ...

Пробелы в url

Тема в разделе "PHP для новичков", создана пользователем Khaybulla, 15 дек 2016.

Метки:
  1. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Как можно сделать что бы не повторялись пробелы в url в данный момент у меня такая система

    К примеру:

    PHP:
    1. $title = "Пробелы - в url";
    Переводим кириллицу в латиницу
    PHP:
    1.     function translit($text) {
    2.         $translit = array(
    3.             "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
    4.             "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
    5.             "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
    6.             "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
    7.             "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
    8.             "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
    9.             "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
    10.             "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
    11.             "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
    12.             "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
    13.             "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
    14.             "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
    15.             "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
    16.             "A"=>"a","B"=>"b","C"=>"c","D"=>"d","E"=>"e",
    17.             "F"=>"f","G"=>"g","H"=>"h","I"=>"i","J"=>"j",
    18.             "K"=>"k","L"=>"l","M"=>"m","N"=>"n","O"=>"o",
    19.             "P"=>"p","Q"=>"q","R"=>"r","S"=>"s","T"=>"t",
    20.             "U"=>"u","V"=>"v","W"=>"w","X"=>"x","Y"=>"y",
    21.             "Z"=>"z"," "=>"-","-"=>"","«"=>"","»"=>"","`"=>"",
    22.             "!"=>"","@"=>"","#"=>"","№"=>"","$"=>"",
    23.             "%"=>"","^"=>"","&"=>"","*"=>"","("=>"",
    24.             ")"=>"","_"=>"","="=>"","+"=>"",
    25.             "."=>"",","=>"","|"=>"",":"=>"",
    26.             ";"=>""
    27.         );
    28.         return strtr($text,$translit);
    29.     }
    Вывожу title
    PHP:
    1. translit($title)
    И выходит в url - probelyi--v-url
    Как сделать что бы не повторялись тире а было - probelyi-v-url
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    функция транслит твоя смысл теряет судя по названию, ты либо транслируешь либо меняешь символы нужные тебе
     
  3. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    PHP:
    1. $title = "Пробелы - в url";
    В общем мне из $title нужно получить вот такой url - probelyi-v-url
    Как можно такое реализовать ?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    ясно :D
    PHP:
    1. echo str_replace ( [ ' - ', ' ' ], [ '-', '-' ], 'Пробелы - в url Пробелы - в url Пробелы - в url' );
     
  5. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Не совсем то, если в $title="Пробелы%$! - в url 213"; нужно что бы символы удалялись и сколько бы пробелов между словами и цифрами не было что бы выходил только 1 тире - probelyi-v-url-213...
    Вот как на этом форуме тут такая же система с url
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    да это наглость уже
     
    denis01 нравится это.
  7. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Я не прошу вас это за меня делать, я изначально задавал вопрос что бы подтолкнули в правильном направлении, так то и через translit ща работает но если поставить 10 пробелов то он выдает 10 тире а мне надо что бы всегда вставлял между только 1 тире...
     
  8. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    PHP:
    1. <?php
    2. function generate_alias($name = '') {
    3.   $name = trim($name);
    4.   if (empty($name)) {
    5.     return false;
    6.   }
    7.   $rus = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т',
    8.     'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'    ];
    9.   $lat = ['a', 'b', 'v', 'g', 'd', 'e', 'yo', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't',
    10.     'u', 'f', 'h', 'c', 'ch', 'sh', 'shch', 'y', 'y', 'y', 'e', 'yu', 'ya'];
    11.   $pattern = ['/[\pP\pS\s]/u', '/[-]+/', '/[-]+$/'];
    12.   $replace = ['-', '-', ''];
    13.   $name = preg_replace($pattern, $replace, $name);
    14.   return str_replace($rus, $lat, mb_strtolower($name, 'utf-8'));
    15. }
    16.  
    17. echo generate_alias(' очень            много          пробелов и лишних !"№;%:?*()_+= знаков препинания,,,,  ');
    18. // ocheny-mnogo-probelov-i-lishnih-znakov-prepinaniya
     
    Khaybulla нравится это.
  9. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Спасибо! работает как надо, только выдавало ошибку "Parse error: syntax error, unexpected '['" сменил [] на array() и теперь работает.

    PHP:
    1. function generate_alias($name = '') {
    2.         $name = trim($name);
    3.         if (empty($name)) {
    4.             return false;
    5.         }
    6.         $rus = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т',
    7.         'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'    );
    8.         $lat = array('a', 'b', 'v', 'g', 'd', 'e', 'yo', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't',
    9.         'u', 'f', 'h', 'c', 'ch', 'sh', 'shch', 'y', 'y', 'y', 'e', 'yu', 'ya');
    10.         $pattern = array('/[\pP\pS\s]/u', '/[-]+/', '/[-]+$/');
    11.         $replace = array('-', '-', '');
    12.         $name = preg_replace($pattern, $replace, $name);
    13.         return str_replace($rus, $lat, mb_strtolower($name, 'utf-8'));
    14.     }
     
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Это плохо. В данном случае, плохо не то, что ошибку выдало, а то что у вас очень старая версия PHP, которая уже не поддерживается.
     
    Khaybulla нравится это.
  11. Khaybulla

    Khaybulla Активный пользователь

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Да на хостинге php 5.3 там работает а на денвере видимо старая была версия... ещё раз спасибо!
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    все пробелы заменить на палки, потом все палки по две менять на одну пока больше не останется палок по две. =) https://php.ru/manual/function.strpos.html важно знать, что может вернуть ноль, но это не будет фалс, а будет начало строки.

    Потом обрезать палки через трим, чтобы не было палок в начале и в конце строки.