Удаление нежелательных символов из вывода CGI - PullRequest
0 голосов
/ 16 июня 2011

У меня есть веб-сайт, написанный на C, который вставляет HTML-шаблоны верхнего и нижнего колонтитула вместе с динамически генерируемым содержимым между ними.По какой-то причине нежелательный символ «ÿ» (умноженный на y) (ASCII 152) добавляется после каждого вызова displayTemplate ().Этот символ является нежелательным и не является частью файла.Как можно предотвратить вывод этого?Спасибо.

Код, который выполняет эту функцию, выглядит примерно так:

#include <stdio.h>
#include <stdlib.h>

void displayTemplate(char *);

int main(void) {
    printf("%s%c%c\n", "Content-Type:text/html;charset=iso-8859-1", 13, 10);
    displayTemplate("templates/mainheader.html");
    /* begin */ 
        printf("<p>Generated site content goes here.</p>"); 
    /* end */
    displayTemplate("templates/mainfooter.html");
    return 0;
}
void displayTemplate(char *path) {  
    char currentChar;
    FILE *headerFile = fopen(path, "r");
    do {
        currentChar = fgetc(headerFile);
        putchar(currentChar);
    } while(currentChar != EOF);
    fclose(headerFile);
}

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Измените ваш цикл:

while (true)
{
  currentChar = fgetc(headerFile);
  if (currentChar == EOF) break;
  putchar(currentChar);
}

Возможно, есть более эффективные способы, чем чтение байтов за байтом (например, чтение всего файла или чтение кусками по 64 КБ).

0 голосов
/ 16 июня 2011

'ÿ' - это 255 по ISO 8859-1.Прекратите пытаться напечатать EOF.EOF - это все единицы в двоичном представлении, а при сокращении до 8 бит это 255.

...