IPB 3.4.2 już po testach. System się sprawdza i sam akceptuje polskie znaki w adresach WWW, oczywiście jeśli chcemy mieć duże i małe litery w odnośnikach to wykonujemy poniższą instrukcję:
Zmiana linków IPB 3.4.X na takie, które zawierają duże i małe litery w forum IPB (Uppercase letters in friendly url addresses(FURL) of forums IPB)
Wyjaśnienia: IPB 3.4 posiada już przygotowaną do obsługi polskich znaków narodowych funkcje MakeSEOtitle(), jednakże nadal ma ona problem z dużymi literami i je zamienia na małe. Utrudnia to czytelność tekstu, tym bardziej, że odnośniki są na równi traktowane jak tekst description czy title. Poniższa porada pozwoli dostosować wygląd odnośników, czyli parsowanie dużych i małych liter w najnowszym dziele IPS
Wymagania:
- IPB 3.4.X (wystarczy zmiana z pominięciem 4-6 punktu)
- kodowanie znaków forum: UTF-8
Efekt:
Do dzieła!!
I krok:
- Przejdź do lokalizacji: /admin/source/base/ i edytuj plik: core.php
- Znajdź funkcję: makeSeoTitle( $text ) i podmień zawartość funkcji na:
//rewrited by Makensis SEO v. 2.2.2 static public function makeSeoTitle( $text ) { if ( ! $text ) { return ''; } /* Strip all HTML tags first */ $text = strip_tags($text); /* Remove specific hex characters (/,<,>,#) as it confuses redirect engine */ $text = preg_replace( '#%(2f|3c|3e|23)#i', '', $text ); /* Preserve other %data */ $text = preg_replace('#%([a-fA-F0-9][a-fA-F0-9])#', '-xx-$1-xx-', $text); $text = str_replace( array( '%', '`' ), '', $text); $text = preg_replace('#-xx-([a-fA-F0-9][a-fA-F0-9])-xx-#', '%$1', $text); /* Convert accented chars */ if ( IPS_DOC_CHAR_SET != 'UTF-8' ) { /* http://community.invisionpower.com/resources/bugs.html/_/ip-board/i-broke-furls-urls-with-accents-r41236 */ /* AJAX requests have HTML entities, so convert to accents then romanize */ if ( strstr( $text, '&#' ) ) { $text = html_entity_decode( $text, ENT_NOQUOTES, 'UTF-8' ); } $text = self::convertAccents($text); } /* Convert it */ if ( self::isUTF8( $text ) ) { $text = self::utf8Encode( $text, 250 ); } /* Finish off */ if ( strtolower( IPS_DOC_CHAR_SET ) == 'utf-8' ) { $text = preg_replace( '#&.+?;#' , '', $text ); } else { $text = str_replace( array( '"', '&'), '', $text ); $text = preg_replace( '#\&[\#a-z0-9]{2,6};#i', '', $text ); $text = preg_replace( '#[^%&\#;a-z0-9 _-]#', '', $text ); } $text = str_replace( array( '`', ' ', '+', '.', '?', '_', '#', '&' ), '-', $text ); $text = preg_replace( "#-{2,}#", '-', $text ); $text = trim($text, '-'); IPSDebug::addMessage( "<span style='color:red'>makeSeoTitle ($text) called</span>" ); return ( $text ) ? $text : '-'; }
- Zapisz zmiany w pliku. Funkcję można oczywiście zooptymalizować we własnym zakresie.
- Przejdź do lokalizacji: admin/sources/classes/output i edytuj plik publicOutput.php
- Usuń:
if ( strstr( $_toTest, '%' ) ) { /* Lowercase it as some browsers send %E2 but it will be stored as %e2 */ $_toTest = strtolower( $_toTest ); }
- W wersji IPB 3.4.9 usuń:
if ( strstr( $_toTest, '%' ) ) { /* Lowercase it as some browsers send %E2 but it will be stored as %e2 */ $_toTest = strtolower( $_toTest ); }
- Zapisz zmiany w pliku