На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Положения
1. Раздел "Готовые движки" предназначен для поиска и обсуждения готовых веб-решений.
2. Ответы с предложением разработать свой собственный движок будут удаляться без предупреждения.
  
    > Кодировка CP1251 в Dokuwiki , некорректно создаёт URL русских ссылок
      Установлена Dokuwiki 2005-09-22e / Sources.RU, основанная на движке PHP.

      При создании ссылок, содержащих английские буквы всё путём, естественно. А вот если содержат русские буквы, то есть проблема, пожалуй, единственная, из-за которой Dokuwiki до сих пор не выйдет в свет.
      Пример:
      с созданием ссылки [[test page]] нет проблем, а в [[Новая страница]] неправильно генерируется URL странички.
      "Проверка" = "%CF_%EE_%E0"
      "test page" = "test_page"

      Разработчики с некоторой версии перешли на кодировку UTF-8, с которой нет проблем ссылок. Зато при выставлении кодировки CP1251 никак не хочет генерировать ссылки нормально. Странно также то, что в более ранних версиях, до миграции в UTF-8, тоже проблемы с русскими ссылками.
      Если бы разбирался в PHP, возможно, стал бы копаться с целью внесения изменений кода, но, увы...

      Что посоветуете?
        Цитата Romtek @
        Что посоветуете?
        Разбираться.
          ExpandedWrap disabled
                function internallink($match, $state, $pos) {
                    // Strip the opening and closing markup
                    $link = preg_replace(array('/^\[\[/','/\]\]$/u'),'',$match);
                    
                    // Split title from URL
                    $link = preg_split('/\|/u',$link,2);
                    if ( !isset($link[1]) ) {
                        $link[1] = NULL;
                    } else if ( preg_match('/^\{\{[^\}]+\}\}$/',$link[1]) ) {
                        // If the title is an image, convert it to an array containing the image details
                        $link[1] = Doku_Handler_Parse_Media($link[1]);
                    }
                    $link[0] = trim($link[0]);
             
                    //decide which kind of link it is
             
                    if ( preg_match('/^[a-zA-Z]+>{1}.*$/u',$link[0]) ) {
                    // Interwiki
                        $interwiki = preg_split('/>/u',$link[0]);
                        $this->_addCall(
                            'interwikilink',
                            array($link[0],$link[1],strtolower($interwiki[0]),$interwiki[1]),
                            $pos
                            );
                    }elseif ( preg_match('/^\\\\\\\\[\w.:?\-;,]+?\\\\/u',$link[0]) ) {
                    // Windows Share
                        $this->_addCall(
                            'windowssharelink',
                            array($link[0],$link[1]),
                            $pos
                            );
                    }elseif ( preg_match('#^([a-z0-9\-\.+]+?)://#i',$link[0]) ) {
                    // external link (accepts all protocols)
                        $this->_addCall(
                                'externallink',
                                array($link[0],$link[1]),
                                $pos
                                );
                    }elseif ( preg_match('#([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i',$link[0]) ) {
                    // E-Mail
                        $this->_addCall(
                            'emaillink',
                            array($link[0],$link[1]),
                            $pos
                            );
                    }elseif ( preg_match('!^#.+!',$link[0]) ){
                    // local link
                        $this->_addCall(
                            'locallink',
                            array(substr($link[0],1),$link[1]),
                            $pos
                            );
                    }else{
                    // internal link
                        $this->_addCall(
                            'internallink',
                            array($link[0],$link[1]),
                            $pos
                            );
                    }
             
                    return TRUE;
                }


          ExpandedWrap disabled
            /**
             * This builds a link to a wikipage
             *
             * It handles URL rewriting and adds additional parameter if
             * given in $more
             *
             * @author Andreas Gohr <andi@splitbrain.org>
             */
             
            function wl($id='',$more='',$abs=false){
              global $conf;
              if(is_array($more)){
                $more = buildURLparams($more);
              }else{
                $more = str_replace(',','&',$more);
              }
             
              $id    = idfilter($id);
              if($abs){
                $xlink = DOKU_URL;
              }else{
                $xlink = DOKU_BASE;
              }
             
              if($conf['userewrite'] == 2){
                $xlink .= DOKU_SCRIPT.'/'.$id;
                if($more) $xlink .= '?'.$more;
              }elseif($conf['userewrite']){
                $xlink .= $id;
                if($more) $xlink .= '?'.$more;
              }else{
                $xlink .= DOKU_SCRIPT.'?id='.$id;
                if($more) $xlink .= '&'.$more;
              }
              
              return $xlink;
            }


          Насколько верно, на ваш взгляд, этот код позволяет обрабатывать русские URL ?
            Этот код тут вообще не при чём. Разбирайтесь, почему у вас в хидерах вместо
            ExpandedWrap disabled
              Content-Type: text/html; charset=utf-8
            возвращается
            ExpandedWrap disabled
              Content-Type: text/html; charset=windows-1251


            Добавлено
            Цитата Romtek @
            Зато при выставлении кодировки CP1251 никак не хочет генерировать ссылки нормально
            Так не делайте так. Если вам влом весь код перелопачивать.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0322 ]   [ 15 queries used ]   [ Generated: 27.04.24, 17:56 GMT ]