0

クライアントが指定したページのタイトルに基づいてページを作成する CMS を作成しました。

たとえば、「About Us」は「about-us.php」として作成されます

現在、次を使用して、許可されていないすべての文字を取り除きます。ページを編集して別の名前を呼び出すときのコードを追加して、ファイルの名前を変更します。

    function toAscii($str) {        
        $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
        $clean = strtolower(trim($clean, '-'));
        $clean = preg_replace("/[\/_|+ -]+/", '-', $clean);
        return $clean;
    }
// Renames the file
    rename(toAscii($row_Recordset1['content_title']).".php", toAscii($_POST['content_title']).".php");

しかし、これらの特殊文字を本当に許可したいので、上記の関数を次のように変更しました。

    function toAscii($str) {
        $clean = strtolower($str);
        $clean = str_replace(";", "%3B", $clean);
        $clean = str_replace("/;", "%2F", $clean);
        $clean = str_replace("?", "%3F", $clean);
        $clean = str_replace(":", "%3A", $clean);
        $clean = str_replace("&", "%26", $clean);
        $clean = str_replace("@", "%40", $clean);
        $clean = str_replace("=", "%3D", $clean);   
        $clean = str_replace(" ", "-", $clean);
        return $clean;
    }
// Renames the file
rename(toAscii($row_Recordset1['content_title']).".php", toAscii($_POST['content_title']).".php");  

エレガントではないことはわかっていますが、理論的には機能するはずです。

そうではありません。

したがって、ファイル名が「shows-%2F-exhibitions.php」である必要がある場合、実際には「shows-/-exhibitions.php」として表示されますが、これは明らかに許可されていません。

16進コードを適用して再びスラッシュで終わるのではなく、ファイル名に16進コードを保持させるにはどうすればよいですか?

それとも、URL にスラッシュを使用することは許可されていませんか?

4

3 に答える 3

0

a-zA-Z0-9_ファイル名以外の文字を完全に禁止することをお勧めします。データベース テーブルを使用して、人間が判読できる適切な名前をファイル名にマップします。「同一の」名前も処理するようにしてください。

Shows/Events --> showsevents.php
Shows-Events --> showsevents1.php
于 2013-01-29T12:58:13.930 に答える
0

toAscii 関数のユニバーサル バージョン:

function toAscii($str) {
    return iconv('UTF-8', 'ASCII//TRANSLIT', $src);
}

URL から非 ASCII 文字を削除することは非常に一般的であるため、これらの URL の読み書きがはるかに簡単になります。URL に一意の ID を含めて一意であることを確認し、リンクを読みやすくするために追加のテキストを保持することもできます。例: http://example.com/123-some-article。この URL を処理するには、数字を切り取ってデータベースを検索し、残りのテキストを比較して、Google 爆弾の作成を防ぎます。

URL に特殊文字が本当に必要な場合は、php スクリプトが取得する前に % エンコーディングがサーバーによってデコードされるため、url_encode とは異なる方法でエンコードする必要があります。

于 2013-01-29T12:56:56.807 に答える
0

urlencode 関数 (および対応する urldecode) を見てください。

ところで、タイプミスがstr_replace('/;' ...あります(スラッシュの後に冗長なセミコロンがあります)

http://php.net/manual/en/function.urlencode.php

http://php.net/manual/en/function.urldecode.php

于 2013-01-29T12:50:44.687 に答える