Strona 1 z 1

[Poradnik] Polskie znaki w linkach/domenach

: 28 sie 2012, 13:49
autor: Macsch15
Naprawianie parsera URL z linkami które mają polskie znaki w sobie.

Najpierw otwieramy plik functions.php i zmieniany jego kodowanie na UTF-8 bez BOM.

Następnie odnajdujemy funkcję
function get_preg_expression($mode)


I w niej kod:
        case 'url':
        case 'url_inline':
            $inline = ($mode == 'url') ? ')' : '';
            $scheme = ($mode == 'url') ? '[a-z\d+\-.]' : '[a-z\d+]'; // avoid automatic parsing of "word" in "last word.http://..."
            // generated with regex generation file in the develop folder
            return "[a-z]$scheme*:/{2}(?:(?:[a-zA-Z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\])(?::\d*)?(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
        break;

Zamieniamy go na:
        case 'url':
        case 'url_inline':
            $inline = ($mode == 'url') ? ')' : '';
            $scheme = ($mode == 'url') ? '[a-z\d+\-.]' : '[a-z\d+]'; // avoid automatic parsing of "word" in "last word.http://..."
            // generated with regex generation file in the develop folder
            return "[a-z]$scheme*:/{2}(?:(?:[ęóąśłżźćńĘÓĄŚŁŻŹĆŃa-zA-Z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\])(?::\d*)?(?:/(?:[ęóąśłżźćńĘÓĄŚŁŻŹĆŃa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
        break

Przed zmianą, generowany url dla adresu forów.pl:
<!-- m --><a class="postlink" target="_blank" href="http://www.for">http://www.for</a><!-- m -->ów.pl

Po zmianie:
<!-- m --><a class="postlink" target="_blank" href="http://www.forów.pl">http://www.forów.pl</a><!-- m -->

<!-- m --><a class="postlink" target="_blank" href="http://forów.pl/ówdzie.żób">http://forów.pl/ówdzie.żób</a><!-- m -->


:)