Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.8.82] |
|
Сообщ.
#1
,
|
|
|
Установлена Dokuwiki 2005-09-22e / Sources.RU, основанная на движке PHP.
При создании ссылок, содержащих английские буквы всё путём, естественно. А вот если содержат русские буквы, то есть проблема, пожалуй, единственная, из-за которой Dokuwiki до сих пор не выйдет в свет. Пример: с созданием ссылки [[test page]] нет проблем, а в [[Новая страница]] неправильно генерируется URL странички. "Проверка" = "%CF_%EE_%E0" "test page" = "test_page" Разработчики с некоторой версии перешли на кодировку UTF-8, с которой нет проблем ссылок. Зато при выставлении кодировки CP1251 никак не хочет генерировать ссылки нормально. Странно также то, что в более ранних версиях, до миграции в UTF-8, тоже проблемы с русскими ссылками. Если бы разбирался в PHP, возможно, стал бы копаться с целью внесения изменений кода, но, увы... Что посоветуете? |
Сообщ.
#2
,
|
|
|
Цитата Romtek @ Разбираться. Что посоветуете? |
Сообщ.
#3
,
|
|
|
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; } /** * 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 ? |
Сообщ.
#4
,
|
|
|
Этот код тут вообще не при чём. Разбирайтесь, почему у вас в хидерах вместо
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=windows-1251 Добавлено Цитата Romtek @ Так не делайте так. Если вам влом весь код перелопачивать. Зато при выставлении кодировки CP1251 никак не хочет генерировать ссылки нормально |