Question

Je viens de tester localement mon application Web, tout fonctionne très bien, mais après avoir téléchargé l'application serveur se comporte différemment. J'utilise la fonction formatiraj_string_url pour convertir les symboles diacritiques et obtenir url propre ... sur place, il fonctionne très bien, mais sur le serveur cette fonction ne marche pas les convertir de la même manière.

Quelques jours plus tôt je l'ai testé cela sur une troisième serveur et il a bien fonctionné. Maintenant, je le téléchargement Web pour le tester à nouveau sur ce troisième serveur, mais je me demande ce qui pourrait vraiment être la cause d'un tel comportement?

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: Avant str_replace, cette fonction utilisée preg_replace. Sur le serveur ce fut l'erreur a montré:

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

Mais localement, je n'ai pas eu ce problème

Était-ce utile?

La solution

Quel est votre charset fichier écrit en?

Puisque vous avez écrit les caractères que vous souhaitez remplacer directement dans votre code, sous forme de chaînes, ils sont codés dans tout charset le fichier utilise. Si ce charset diffère de ce que vous obtenez à partir du navigateur, vos fonctions ne vont pas travailler.

Le point important que vous devez garder à l'esprit, est de toujours garder une trace de vos chaînes charset sont codées avec, et convertir en neccessary.

Jetez un oeil à Kore Nordmanns FAQ sur PHP dans les jeux de caractères pour certains plus de pointeurs sur les jeux de caractères.

Autres conseils

Je vous recommande dépendez existant, le code hautement testé pour le faire. Je crois que toutes ces fonctions supposent l'entrée UTF-8 et la sortie ASCII 7 bits:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top