We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32825
    • 3 Posts
    Появилась необходимость создать сниппет для сокращения ссылок через bit.ly. Код рабочий, но возникла проблема для ссылок вида http://domain.ru/news/?action=view&id=xxxx. Дело в том, что до сервиса доходит ссылка http://domain.ru/news/?action=view , то есть съедается все после знака &. Практически весь контент сайта на подобных ссылках. Перейти на адекватные ссылки планируется, но намного позже. Сайт на базе MODx Evolution. Код сниппета:
    $url = "http://domain.ru/news/?action=view&id=$_GET[id]";
    $bitlylogin = "login";
    $bitlyapikey = "R_68bd1f9d0xxxx184cfa6xxx426eb";
    $bitly = BitURL($url, $bitlylogin, $bitlyapikey);
    echo $bitly;
    function BitURL($url, $bitlylogin, $bitlyapikey){
    $returnxml = file_get_contents(’http://api.bit.ly/shorten?version=2.0.1&longUrl=’.$url.’&login=’.$bitlylogin.’&apiKey=’.$bitlyapikey.’&format=xml’);
    $result = new SimpleXMLElement($returnxml);
    return $result->results->nodeKeyVal->shortUrl;
    }

    Подскажите, пожалуйста, как можно решить/обойти эту проблему?

    PS пробовал менять в сниппете &id на ?id и в .htaccess прописывать редирект, но не вышло. Хотелось бы найти решение попроще =)
    Заранее благодарен
      • 785
      • 2,113 Posts
      Когда пользуетесь сервисом (bit.ly), неплохо бы документацию на него прочитать…

      Там написано (выделение мое):

      Long URLs should be URL-encoded. You can not include a longUrl in the request that has ’&’, ’?’, ’#’, ’ ’, or other reserved parameters without first encoding it.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 32825
        • 3 Posts
        Прошу прощения за тупость :-D

        c заменой & на %26 все работает. Спасибо =)

        Полностью рабочий код сниппета.
        $url = "http://domain.ru/news/?action=view%26id=$_GET[id]";
        $bitlylogin = "login";
        $bitlyapikey = "R_68bd1f9d0xxxx184cfa6xxx426eb";
        $bitly = BitURL($url, $bitlylogin, $bitlyapikey);
        echo $bitly;
        function BitURL($url, $bitlylogin, $bitlyapikey){
        $returnxml = file_get_contents(’http://api.bit.ly/shorten?version=2.0.1&longUrl=’.$url.’&login=’.$bitlylogin.’&apiKey=’.$bitlyapikey.’&format=xml’);
        $result = new SimpleXMLElement($returnxml);
        return $result->results->nodeKeyVal->shortUrl;
        }