Pergunta

Acabei de testar localmente meu aplicativo da web, tudo funciona bem, mas depois de fazer o upload para o aplicativo do servidor se comporta de maneira diferente. Eu uso a função formatiraj_string_url para converter símbolos diacríticos e obter URL limpo ... localmente, funciona bem, mas no servidor essa função não os converte da mesma maneira.

Poucos dias antes, testei isso em algum terceiro servidor e funcionou bem. Agora estou enviando a Web para testá -lo novamente neste terceiro servidor, mas só me pergunto o que poderia ser a causa desse comportamento?

function formatiraj_string_url($string)
    {
        $string = strtolower($string);

        $znak[0] = ' ';
        $znak[1] = 'Š';
        $znak[2] = 'š';
        $znak[3] = 'Đ';
        $znak[4] = 'đ';
        $znak[5] = 'Č';
        $znak[6] = 'č';
        $znak[7] = 'Ć';
        $znak[8] = 'ć';
        $znak[9] = 'Ž';
        $znak[10] = 'ž';
        $znak[11] = 'Š';
        $znak[12] = 'Đ';
        $znak[13] = 'Č';
        $znak[14] = 'Ć';
        $znak[15] = 'Ž';
        $znak[16] = 'š';
        $znak[17] = 'đ';
        $znak[18] = 'č';
        $znak[19] = 'ć';
        $znak[20] = 'ž';
        $znak[21] = 'Š'; // Š
        $znak[22] = 'š'; // š

        $zamjena[0] = '-';
        $zamjena[1] = 's';
        $zamjena[2] = 's';
        $zamjena[3] = 'd';
        $zamjena[4] = 'd';
        $zamjena[5] = 'c';
        $zamjena[6] = 'c';
        $zamjena[7] = 'c';
        $zamjena[8] = 'c';
        $zamjena[9] = 'z';
        $zamjena[10] = 'z';
        $zamjena[11] = 's';
        $zamjena[12] = 'd';
        $zamjena[13] = 'c';
        $zamjena[14] = 'c';
        $zamjena[15] = 'z';
        $zamjena[16] = 's';
        $zamjena[17] = 'd';
        $zamjena[18] = 'c';
        $zamjena[19] = 'c';
        $zamjena[20] = 'z';
        $zamjena[21] = 's';
        $zamjena[22] = 's';

        $string = str_replace($znak, $zamjena, $string);
        $new_string = preg_replace("/[^a-zA-Z0-9-s]/", "", $string);
        return $new_string;
    }

EDIT: Antes de str_replace, essa função usou preg_replace. No servidor, este foi o erro mostrado:

Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in /home2/sinjcom/public_html/sinj.com.hr/administracija/include/funkcije.php on line 200

Mas localmente, eu não tive esse problema

Foi útil?

Solução

Em qual charset é seu arquivo escrito?

Como você escreveu os caracteres que deseja substituir diretamente em seu código, como strings, eles são codificados em qualquer charset que o arquivo use. Se esse charset difere do que você obtém do navegador, suas funções não funcionarão.

O ponto importante que você precisa ter em mente é sempre acompanhar o charset que suas cordas são codificadas e converter quando necessário.

Dar uma olhada em FAQ KORE NORDMANNS SOBRE CHARSETS EM PHP Para mais algumas dicas sobre charsets.

Outras dicas

Eu recomendo que você confie no código altamente testado existente para fazer isso. Eu acredito que todas essas funções assumem que a entrada e saída de 7 bits do UTF-8:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top