Extra Form
PHP PHP 5.6
CMS XpressEngine

 

DB에 저장된 C언어 소스를 출력하는 외부 페이지가 있습니다.

당연히 DB에 저장할 때와 가져올 때 이스케이프 처리를 했습니다. (최대한 한다고 했습니다.ㅠㅠ)

 

즉, 소스를 서버에 저장할 때는 mysql_real_escape_string()를 사용해서 쿼리로 insert 했고,

서버에 저장된 소스를 가져올 때는 쿼리로 select한 후 htmlspecialchars()로 변환한 값은 echo 하였습니다.

 

그런데, 다음과 같은 경우가 생기네요..

 

<정상 출력>

#include<stdio.h>
int d[11],p[1001];
int main()
{
    int i,c=0,m=0,k;
    for(i=1; i<=10; i++)
    {
        scanf("%d",&d[i]);
        c=c+d[i];
        p[d[i]]++;
    }
    c=c/10;
    for(i=0; i<=1000; i++)
    {
        if(m<p[i])
        {
            m=p[i];
            k=i;
        }
    }
    printf("%d\n%d",c,k);
    return 0;
}

 

위 소스 코드의 2번 라인을 아래와 같이 변경한 후 리로드하면 500 에러가 발생합니다.

아무리 생각해 봐도, 이스케이프가 덜 된거 같은데....

몇 달째 원인을 찾지 못하고 있습니다. ㅠㅠ

 

#include<stdio.h>
int d[11],p[1001]={0,};
int main()
{
    int i,c=0,m=0,k;
    for(i=1; i<=10; i++)
    {
        scanf("%d",&d[i]);
        c=c+d[i];
        p[d[i]]++;
    }
    c=c/10;
    for(i=0; i<=1000; i++)
    {
        if(m<p[i])
        {
            m=p[i];
            k=i;
        }
    }
    printf("%d\n%d",c,k);
    return 0;
}

 

모든 내용을 지우고, 아래와 같이 남겨도 안되네요..ㅠㅠ 정말 희한하면서 미치겠네요~

{0,}

 

위에서 쉼표(,)만 빼면 정상 작동합니다.. 아....ㅠ.ㅠ

소스에 다른 부분(5번 라인, 8번 라인 등)에서 수많은 쉼표가 사용되고 있으며, 그건 아무 문제가 없는데 말이지요...

 

2019-03-17 12 39 09.png

 

특정 소스에서만 이러한 증상이 발생하고, 일반적인 상황에서는 정상 동작하고 있습니다.

  • profile

    출력하시는 소스가 XE 템플릿 코드로 인식되고 있는 것 같습니다. {0}은 <?php echo  0 ?>으로 변환되어 그냥 0을 출력하지만, {0,}은 <?php echo 0, ?>으로 변환되어 문법 오류가 나지요.

     

    외부페이지라면 XE 템플릿 코드를 임의로 인식할 수 있습니다. 레이아웃이나 스킨처럼 템플릿 코드와 그렇지 않은 내용이 분명히 구분되는 곳으로 이동해 보시기 바랍니다. 그게 곤란하다면 str_replace 함수를 사용해서 { } 중괄호를 거기에 해당하는 HTML entity &#123; &#125;로 바꾸어 출력해 보세요.

  • profile ?
    스킨이 필요한외부 페이지라서요..
    혹시 소스 부분만 블락 처리하는 방법은 없을까요?
  • ? profile

    문서 페이지, 혹은 위젯 페이지로 만드신다음 에디터 컴포넌트에 코드 하이라이트 기능을 사용하시는 것이 좋을 것 같습니다.

  • profile ?
    말씀해 주신 방법으로 해결하였습니다!
    감사합니다. (꾸벅)