2

Web アプリケーションをローカルでテストしたところ、すべて正常に動作しますが、サーバー アプリケーションにアップロードすると動作が異なります。関数 formatiraj_string_url を使用して分音記号を変換し、クリーンな URL を取得します...ローカルでは正常に動作しますが、サーバーではこの関数は同じように変換しません。

数日前、これを第 3 のサーバーでテストしたところ、問題なく動作しました。今、この 3 番目のサーバーで再度テストするために Web をアップロードしていますが、そのような動作の原因は本当に何なのだろうか?

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;
    }

編集: str_replace の前は、この関数は preg_replace を使用していました。サーバーでは、次のエラーが表示されました。

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

しかし、ローカルでは、この問題はありませんでした

4

2 に答える 2

3

これを行うには、高度にテストされた既存のコードに依存することをお勧めします。これらの関数はすべて、UTF-8 の入力と出力の 7 ビット ASCII を想定していると思います。

于 2009-10-12T21:14:38.173 に答える
2

あなたのファイルはどの文字セットで書かれていますか?

置き換えたい文字を文字列としてコードに直接記述したので、それらはファイルが使用する文字セットでエンコードされます。その文字セットがブラウザーから取得したものと異なる場合、関数は機能しません。

覚えておく必要がある重要な点は、文字列がエンコードされている文字セットを常に追跡し、必要に応じて変換することです。

文字セットに関するその他の指針については、Kore Nordmanns FAQ about charsets in PHPを参照してください。

于 2009-10-12T20:10:46.307 に答える