Я не вижу ничего, что могло бы вызвать это в приведенном выше коде. Похоже, что какой-то своенравный указатель, пишущий где-то еще в скрипте, мог записать данные для повреждения конца строки переменной?
Что такое getenv(URL)
в любом случае? Нет стандартной переменной среды CGI, которая дает вам текущий URL; вам обычно приходится утомительно собирать его вместе из REQUEST_METHOD / HTTP_HOST / SERVER_PORT / SCRIPT_NAME / PATH_INFO / QUERY_STRING. В Apache вы получаете REQUEST_URI, но он не работает на других серверах.
Хотя это обычно не вызывает проблему, которую вы цитируете, существует проблема с печатью текста в HTML-контексте, как у вас выше: у вас нет экранирования HTML, поэтому любые &
, "
или <
символов в URL приведет к неверному выводу. Каждый раз, когда вы добавляете текст или значение атрибута из строки, вы должны экранировать ее HTML, иначе вы рискуете сделать дыру в безопасности между сайтами. ("
и <
вряд ли могут существовать в URL, но могут появиться в зависимости от того, как вы обрабатываете SCRIPT_NAME / PATH_INFO. &
очень вероятно появится в URL.)
Наконец, <meta refresh>
для перенаправления крайне нежелателен. Почему не правильное перенаправление на основе Location
?