サニタイズ問題解決

昨日の続き。そういえばstring.hにstrstrっつー非常に便利な関数がある事を思い出したんで
それを使って関数を組み直すことにした。

いくつかの解説サイトや書籍を参考にしつつ、昨日作った関数からmemmoveのアイディアを頂きつつ

void exec_sanitize(char *str, const char *tgt, const char *after) {
    char *match;
    size_t tgt_len;
    size_t aft_len;

    tgt_len = strlen(tgt);
    aft_len = strlen(after);

    while((match = strstr(str, tgt)) != NULL) {
        memmove(match + aft_len, match + tgt_len, strlen(match) - tgt_len );
        memmove(match, aft, aft_len);
    }
}

void sanitize(char *str) {
    exec_sanitize(str, "&", "&");
    exec_sanitize(str, "<", "&lt;");
    exec_sanitize(str, ">", "&gt;");
    exec_sanitize(str, "\"", "&quot;");
    exec_sanitize(str, "'", "&#39;");
}

上記みたいな感じに。