2021-01-05

php : 텍스트를 디비에 저장할 때 필요한 글자 치환

 이번에는 텍스트를 디비에 저장할 때 필요한

글자 치환을 해보겠습니다.


디비에 저장할 때 ' 기호와 "기호는 디비 쿼리에서 사용하는 기본형식에 들어가는 기호라서

별도 처리를 해줘야 하는데요

그냥 사용하면 디비 저장시 오류가 날수 있습니다.


그래서

$data = htmlspecialchars($t_text,  ENT_QUOTES) ;

$data = addslashes($t_text) ;

등을 사용하지만 제일 추천하는 방식은


$data = eregi_replace("'","´",eregi_replace("\"","˝",$t_text)) ;


이것입니다.

' 을 ´ (특수문자표)로

" 을 ˝ (특수문자표)로 치환했습니다.


이것이 완벽하지 않고

완벽한 방법은 없습니다.


그냥 여러가지 방법중 사용하기 가장 괜찮은 방법입니다.


<?

$t_txt = "안녕하세요.

\"2020년\"이 가고

'2021년'이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~

";


$data = eregi_replace("'","´",eregi_replace("\"","˝",$t_txt)) ;



echo $data ;

// 안녕하세요. ˝2020년˝이 가고 ´2021년´이 왔습니다. 새해에는 모두 건강하시고 복 많이 받으세요~

?>


' 이 ´ (특수문자표)로

" 가 ˝ (특수문자표)로 잘 치환되었습니다.


======================

이하는 참고하세요.


htmlspecialchars() 도 쓸만합니다만...



안녕하세요.

&quot;2020년&quot;이 가고

&#039;2021년&#039;이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~



<?

$t_txt = "안녕하세요.

\"2020년\"이 가고

'2021년'이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~

";


$data = htmlspecialchars($t_txt,  ENT_QUOTES) ;


echo $data ;

// 안녕하세요. "2020년"이 가고 '2021년'이 왔습니다. 새해에는 모두 건강하시고 복 많이 받으세요~

?>



안녕하세요.

&quot;2020년&quot;이 가고

&#039;2021년&#039;이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~


디비에 저장할 때

" 은  &quot;  로

' 은  &#039; 로 저장됩니다.


사용하는 경우에 따라서 다시 원상태로 변환시켜 줘야 하는데요...


https://www.php.net/

사이트에서 살펴보듯이


echo htmlspecialchars_decode($str, ENT_NOQUOTES);


이런 함수로 디코딩 해줄 수 있습니다.

실행해 보겠습니다.

<?

$t_txt = "안녕하세요.

&quot;2020년&quot;이 가고

&#039;2021년&#039;이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~

";


$data = htmlspecialchars_decode($t_txt, ENT_NOQUOTES) ;


echo $data ;

// 안녕하세요. "2020년"이 가고 '2021년'이 왔습니다. 새해에는 모두 건강하시고 복 많이 받으세요~

?>


보이는 건 동일한데요...

html 코드를 보겠습니다.

-----

안녕하세요.

&quot;2020년&quot;이 가고

&#039;2021년&#039;이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~

-----

어 뭔가 아니네요.


ENT_NOQUOTES 이 부분을

ENT_QUOTES  으로 바꾸어 보겠습니다.


-----

<?

// http://www.yms.kr/1.html



$t_txt = "안녕하세요.

&quot;2020년&quot;이 가고

&#039;2021년&#039;이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~

";


$data = htmlspecialchars_decode($t_txt, ENT_QUOTES) ;


echo $data ;

// 안녕하세요. "2020년"이 가고 '2021년'이 왔습니다. 새해에는 모두 건강하시고 복 많이 받으세요~

?>

안녕하세요.

"2020년"이 가고

'2021년'이 왔습니다.

새해에는 모두 건강하시고 복 많이 받으세요~

-----

이제 제대로 디코딩 되었습니다.



=================



htmlspecialchars() 함수로

이렇게 인코딩을 했으면


htmlspecialchars_decode() 함수로 

디코딩을 해주어야 합니다.


일일이 신경써서 코딩을 해야하기에

아무래도 좀 불편합니다.


그래서 저는

$data = eregi_replace("'","´",eregi_replace("\"","˝",$t_txt)) ;

처럼...


' 을 ´ (특수문자표)로

" 을 ˝ (특수문자표)로 치환해서 사용합니다.


아 물론 html 코드나 css 코드 자바스크립트코드를 디비에 저장했다 호출할 때는 적합하지 않습니다.

순수한 텍스트를 디비에 저장하고 호출할 때 유용합니다. 이 방법을 강추합니다.






2021-01-04

Json의 데이타 형식 : array , 배열, $a[b][c][d]

 Json의 데이터 형식은 배열 array 이다.


1) Json 데이터를 아래와 같이 구성하여 보낼 수 있다.


1-1) PHP 5.6 에서는 array( array( array( ) ) ) 형태로 배열 작성을 해야 한다.


$json_ = array(
"aaa"=>"AAA",
"aab"=>"AAB",
"bbb"=>array("bbc"=>"BBC", "bbd"=>"BBD", "bbe"=>"BBE"),
"ccc"=>"CCC",
"eee"=>array("eef"=>"EEF", "eeg"=>"EEG", "eeh"=>"EEH"),
"fff"=>array("ggg"=>array("ggh"=>"GGH","ggi"=>"GGI"), "hhh"=>"HHH", "iii"=>"III"),
"jjj"=>"JJJ"
);



1-2) 이것은 PHP에서 다음과 같이 입력할 수도 있다.


$json_[aaa] = "AAA";
$json_[aab] = "AAB";
$json_[bbb][bbc] = "BBC";
$json_[bbb][bbd] = "BBD";
$json_[bbb][bbe] = "BBE";
$json_[ccc] = "CCC";
$json_[eee][eef] = "EEF";
$json_[eee][eeg] = "EEG";
$json_[eee][eeh] = "EEH";
$json_[fff][ggg][ggh] = "GGH";
$json_[fff][ggg][ggi] = "GGI";
$json_[fff][hhh] = "HHH";
$json_[fff][iii] = "III";
$json_[jjj] = "JJJ";



1-3) 반복문 : for (), while() 안에서
for() {
    $json[rates][] = array("a"=>$aaa, "b"=>$bbb, "c"=>$ccc);
}


=> 이것을 인코딩하면 다음과 같이 표시된다.

---------------------

$json = json_encode($json,JSON_UNESCAPED_UNICODE);
print_r($json);

---------------------

{"rates":[{"a":"aaa","b":"bbb","c":"ccc"},{"a1":"aaa1","b1":"bbb1","c1":"ccc1"},{"a2":"aaa2","b2":"bbb2","c2":"ccc2"},{"a3":"aaa3","b3":"bbb3","c3":"ccc3"}]}






2) Json의 데이터는 다음과 같이 php에서 받을 수 있다.


2-1) 넘어오는 변수명을 알고 있으면 다음과 같이 받을 수 있다.


$aaa = $json_[aaa] ;
$aab = $json_[aab] ;
$bbc = $json_[bbb][bbc] ;
$bbd = $json_[bbb][bbd] ;
$bbe = $json_[bbb][bbe] ;
$ccc = $json_[ccc] ;
$eef = $json_[eee][eef] ;
$eeg = $json_[eee][eeg] ;
$eeh = $json_[eee][eeh] ;
$ggh = $json_[fff][ggg][ggh] ;
$ggi = $json_[fff][ggg][ggi] ;
$hhh = $json_[fff][hhh] ;
$iii = $json_[fff][iii] ;
$jjj = $json_[jjj] ;



2-2) 넘어오는 변수명을 모르면 다음과 같이 받을 수 있다.


while(list($key,$value)=each($json_)) {

    $data_txt .= "$key : $value\n";


    while(list($key2,$value2)=each($value)) {
        $data_txt .= "-> $key2 : $value2\n";


        while(list($key3,$value3)=each($value2)) {
            $data_txt .= "---> $key3 : $value3\n";
        }
    }
}


2-3) 넘어오는 변수명을 모를때 다음으로도 받을 수 있다.


foreach($json_ as $key,$value) {

    $data_txt .= "$key : $value\n";


    foreach($value as $key2,$value2) {
        $data_txt .= "-> $key2 : $value2\n";


        foreach($value2 as $key3,$value3) {
            $data_txt .= "---> $key3 : $value3\n";
        }
    }
}




3. Json data를 받고서 결과값 리턴하기

if ( !$save_check ) {
    $re_[result] = "error";
    $re_[r_msg] = "저장에 실패했습니다.";
    $json = json_encode($re_, JSON_UNESCAPED_UNICODE);
    print_r($json);
}
else {
    $re_[result] = "ok";
    $re_[r_msg] = "저장에 성공했습니다.";
    $json = json_encode($re_, JSON_UNESCAPED_UNICODE);
    print_r($json);
}


=> 이것은 다음과 같이 표시된다.

{"result":"ok","r_msg":"저장에 성공했습니다."}






4. 리턴받은 결과값을 변수로 받기, 배열로 받기.

---------------

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

---------------


$result = curl_exec($ch);

$data = json_decode($result, true);



echo "aaa: ".$data[aaa]."<br>";
//echo "bbb: ".$data[bcde][0]["bbb"]."<br>";
//echo "ccc: ".$data[bcde][0]["ccc"]."<br>";
//echo "ddd: ".$data[bcde][0]["ddd"]."<br>";


foreach ($data['bcde'] as $key => $value){
    echo $value['bbb']." / ";
    echo $value['ccc']." / ";
    echo $value['ddd']." /<br> ";
};


자바스크립트 : 목록에서 추가내용 펼치고 닫기

 <a style="cursor:pointer;" onclick="Javascript:var temp=document.getElementById('tmemo_<?=$row_[num]?>').style; if (temp.display=='') {temp.display='none'} else {temp.display=''}" title="펼쳐서 보기"><font color="blue">(펼쳐서 보기)</font></a>


<div style="display:none;" id="tmemo_<?=$row_[num]?>">

펼쳤을 때 보이는 내용 어쩌구 저쩌구...

</div>

PHP 5.6.38 버전이상 : PHP 실행페이지 초기에 선언

PHP 5.2.17 버전까지는 필요없었으나

PHP 5.6.38 버전부터는 PHP 실행페이지 초기에 다음을 선언해 주어야 한다.

이것을 /home 디렉토리에 파일로 저장해서 include 시키면 편리하다.


<?

header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"');


// 세션 사용을 알림

ob_start();

session_start();


extract($GLOBALS);

extract($_POST);

extract($_GET);

extract($_SERVER);

extract($_FILES);

extract($_ENV);

extract($_COOKIE);

extract($_SESSION);

extract($_REQUEST);


error_reporting(E_ERROR | E_PARSE);

ini_set("display_errors", 1);

?>





php : if (크거나 같으면), else (작다)

if (크거나 같으면)
else (작다)

 <?

$a = 100000000 ;


if ( $a >= 100000000 ) {

echo "크거나 같다.";

}

else {

echo "작다";

}

?>

PHP : 현재년월~지정년월까지 for문

 현재년월~지정년월까지 for문 예제


1) 현재년월 ~ 지정년월까지

<?

$t_ym = date("Ym");

$s_ym = 202012;

for($i=0; $s_ym < $t_ym; $i++) {

$t_time = mktime(0,0,1,date("m")-$i,1,date("Y"));

$t_ym = date("Ym", $t_time);

$t2_ym = date("Y-m-", $t_time);


echo "$t_ym<br><br>";


}

?>


2) 현재년월 ~ 지난달까지

<?

$t_ym = date("Ym");

$s_ym = date("Ym", mktime(0,0,1,date("m")-1,1,date("Y"))); // 지난달

for($i=0; $s_ym < $t_ym; $i++) {

$t_time = mktime(0,0,1,date("m")-$i,1,date("Y"));

$t_ym = date("Ym", $t_time);

$t2_ym = date("Y-m-", $t_time);


echo "$t_ym<br><br>";

}

?>