CI 묻고 답하기

제목 css나 javascript들이 자꾸 body 태그 안으로 들어가요..ㅠ.ㅠ
글쓴이 태공 작성시각 2009/10/05 16:25:59
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 30805   RSS
안녕하세요?

php 몇년만에 다시 잡아서 이왕 하는거 codeIgniter까지 써보기로 할려고 하는데요.

처음부터 이상한 난관에 빠져버렸습니다.

다름이 아니라 뷰단에 html 하나 만들어서 테스트를 해봤는데요.

css나 javascript 들이 body 태그 밑으로 들어가서 원하는 레이아웃이 안 나오네요.

분명히 코딩 상으로는 head안으로 들어가 있는데 파이어폭스의 파이어버그로 보면 body밑으로 들어가 있네요.

뷰 내용 :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta name="robots" content="noindex, nofollow" />
<meta http-equiv="Pragma" content="no-cache" />
<title><?php echo $page_title; ?></title>
<link rel="stylesheet" type="text/css" href="/css/common.css" />
<link rel="stylesheet" type="text/css" href="/css/member.css" />
<script language="JavaScript" type="text/javascript" src="/js/jquery/jquery.js"></script>
</head>

<body>
</body>

</html>

.htaccess 내용:
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/images/(.*)$
    RewriteCond %{REQUEST_URI} !^/css/(.*)$
    RewriteCond %{REQUEST_URI} !^/js/(.*)$
    RewriteRule ^(.*)$ index.php/$1 [L]   
</IfModule>
<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>


이렇게 되어 있습니다. 도대체 무슨 설정이 잘못 된건지 모르겠어요..
 다음글 dbforge 에 대한 질문.. (11)
 이전글 Unit Test 에 대해서. (3)

댓글

emc / 2009/10/05 17:14:29 / 추천 0

변종원(웅파) / 2009/10/05 17:29:14 / 추천 0
controller도 올려주세요. 뷰만 가지고는 답변드리기가... ^^
태공 / 2009/10/05 18:08:45 / 추천 0
컨트롤러입니다. 내용이 별로 없어 안 올렸네요..
<?php
class Member extends Controller
{
    function Member() {
        parent::Controller();
        $this->load->scaffolding('t_member');
    }
   
    function index() {
        parent::Controller();
    }
   
    function registForm() {
        parent::Controller();
        $this->output->set_header('Content-Type: text/html; charset=UTF-8');
        $this->load->helper(array('form', 'url'));

        $data['page_title'] = "회원 가입";
        $this->load->view('member/member_join', $data);
    }
}

/* End of file member.php */
/* Location: ./system/application/controllers/member.php */
변종원(웅파) / 2009/10/05 21:30:21 / 추천 0

<?php
class Member extends Controller
{
    function Member() {
        parent::Controller();
}
    
    function index() {
        $this->load->scaffolding('t_member');
    }
    
    function registForm() {
        $this->load->helper(array('form', 'url'));

        $data['page_title'] = "회원 가입";
        $this->load->view('member/member_join', $data);
    }
}

/* End of file member.php */
/* Location: ./system/application/controllers/member.php */
parent::Controller(); 는 최상위의 생성자 Member 에만 넣어주시면 됩니다.

그리고 컨트롤러에서 선언한

$this->output->set_header('Content-Type: text/html; charset=UTF-8'); 와

뷰에서의

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 는 동일한 내용입니다.

그리고 스캐폴드가 생성자에서 선언되어 있어서 스캐폴드가 먼저 작동하고 그 이후에 뷰가 나옵니다.
매뉴얼 다시 한번 읽어보시고 생성자 및 함수의 역할을 잘 보시기 바랍니다.
태공 / 2009/10/05 22:07:23 / 추천 0
답변 감사합니다.
registForm 메소드의 부모 생성자 호출과 set_header() 함수는 이것 저것 해보면서 넣어봤습니다.
웅파님께서 수정해 주신 코드대로 했는데도 안되어서 그렇게 해보았던 것이고요...
정말이지 엉뚱한 결과가 나오는데 도저히 이해가 되질 않네요..ㅠ.ㅠ

분명히 브라우저의 소스보기 해서는 제대로 나오는데
브라우저에서는 제대로 안 나오니 참...

더욱이 이해할 수 없는 점은 부라우저의 소스보기한 내용을 그대로 카피해서
코드이그나이터 폴더가 아닌 일반 디렉토리에 넣어서 보면 제대로 나온다는 것입니다.

ci세상 / 2009/10/05 23:22:08 / 추천 0
utf-8로 제대로 인식을 못해서 생기는 문제 같습니다.

컨트롤러, view 파일들 utf-8로 제대로 저장되었는지 확인해 보시구요

브라우져 인코딩 부분을 확인함 해보세요..
쩌렁e / 2014/03/27 17:26:50 / 추천 0
가끔 head에있는 내용이 body로 가서 확인해보면 소스상 아무 문제가 없는데..
이런 희한한 경우를 겪는 분이 계시죠..
결론 부터 말씀 드리자면 열에 아홉은 BOM(Byte order mark) 문제 입니다.
 
notepad++ 같은 툴을 사용하면 파일 저장시 인코딩을 선택하여 저장되는 기능이 있습니다.
저장시 UTF-8(BOM없음)으로 저장하셔야 합니다.
 
에디트 플러스 사용시에는 
도구-기본설정-파일-UTF-8 signature를 always remove signature로 
옵션을 설정하시고 저장하시면 됩니다.
[버전에따라 위 옵션이 없을 수도 있습니다.]
 
이클립스같은경우에는 기본적으로 BOM이 제거가 되지만
사용하던 소스에 BOM에 있을경우 우선 MS949로 변환한 후에 BOM제거 후
다시 UTF-8로 파일 속성을 변경하시면 됩니다.
 
 
BOM이 들어가있는지 확인 하는 방법은 몇가지가 있지만
가장 쉬운 방법으로는 
브라우저상 우클릭해서 인코딩을 한국어나 기타 다른 인코딩으로 변경해보시면
공백이 생기는 부분에 이상하게 깨져있는 글이 들어가 있는게 보일 겁니다.
 
echo나 print와 같은 함수를 사용하신 적이 없다면 100% BOM이 들어 간겁니다.
 
include나 require_once를 넣으면 공백이 생기시는 분 또한 이와 같은 문제입니다.
session_start();같은 함수를 사용될시 headers already sent와 같은 에러를 
발생시키기도 합니다.
 
 
 
한대승(불의회상) / 2014/03/28 09:04:06 / 추천 0
쩌렁e// 좋은 정보 감사 합니다.