레이블이 php인 게시물을 표시합니다. 모든 게시물 표시
레이블이 php인 게시물을 표시합니다. 모든 게시물 표시

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> ";
};


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>";

}

?>

2020-12-25

php : eval 텍스트를 변수로 실행

 <?

$txt_1 = '

$aaa = 2;

$bbb = 3;

$ccc = 4;

echo $ddd = $aaa + $bbb + $ccc ;

echo "<br>";

echo $eee = $aaa.$bbb.$ccc ;

';

eval($txt_1);


echo "<br><br>

ddd : $ddd<br>

eee : $eee

";


/*

9

234


ddd : 9

eee : 234

*/

?>


<?

$txt_1 = '

$txt_[aaa] = 5;

$txt_[bbb] = 6;

$txt_[ccc] = 7;

echo $ddd = $txt_[aaa] + $txt_[bbb] + $txt_[ccc] ;

echo "<br>";

echo $eee = $txt_[aaa].$txt_[bbb].$txt_[ccc] ;

';

eval($txt_1);


echo "<br><br>

ddd : $ddd<br>

eee : $eee

";


/*

18

567


ddd : 18

eee : 567

*/

?>

2020-12-24

PHP 함수(function)에 기존에 없던 변수 추가하기

 함수(function) 작업을 하다보면, 나중에 함수의 변수를 추가해야 하는데

수정할 부분이 너무 많거나, 기억이 안나면

다음과 같이 추가되는 변수를 처리할 수 있다.


<?

function testtest($text, $bbb=""){

if ( $bbb == "" ) $bbb = "빈값";

echo "$text, $bbb";

}


echo testtest("이것은 무엇인가요?");

echo "<br><br>";

echo testtest("이것은 무엇인가요?", "");

echo "<br><br>";

echo testtest("이것은 무엇인가요?", "홍길동");

?>


/* 결과값 : 

이것은 무엇인가요?, 빈값


이것은 무엇인가요?, 빈값


이것은 무엇인가요?, 홍길동

*/

2020-12-22

php : 글자수 자르기

 php에서 글자수를 자르는 함수


<?

$sms_txt = "일이삼사오육칠팔구1 일이삼사오육칠팔구2 일이삼사오육칠팔구3 일이삼사오육칠팔구4 일이삼사오육칠팔구5 일이삼사오육칠팔구6 일이삼사오육칠팔구7 일이삼사오육칠팔구8 일이삼사오육칠팔구9 일이삼사오육칠팔구10 일이삼사오육칠팔구11 일이삼사오육칠팔구12";


echo mb_substr($sms_txt, 0, 100); // 검색어. UTF-8 환경에서


echo mb_substr($sms_txt, 0, 100, "EUC-KR"); // 검색어. EUC-KR 환경에서

?>





php : 웹에서 html 코드를 그대로 보여줄때

 php로 작성한 웹에서 html 코드를 그대로 보여주어야 할 때


<?

echo htmlspecialchars($변수명);

?>

2020-12-21

php 숫자(음수) 추출함수 preg_replace() : 전화번호, 가격

 php 숫자(음수) 추출함수 preg_replace() 입니다. 다음의 용도로 유용합니다.


숫자만 : 전화번호를 DB에 저장할 때

숫자만(음수포함) : 가격을 DB에 저장할 때


<?

$price = " +- 125 ,0\n00^\/ 원이에요."; 

$data = preg_replace("/[^0-9]*/s", "", $price); // 숫자만 추출하기 

$data2 = preg_replace("/[^0-9\-]*/s", "", $price); // 숫자만(음수포함) 추출하기 


echo "$price => $data => $data2"; 

// +- 125 ,0 00^\/ 원이에요. => 125000 => -125000

?>


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

특정단어 "D-"가 있으면, 그 단어를 비우기

<?

$order_num = "D-1234567-abcdefg";


if ( @preg_match("/D-/",$order_num) ) {

$order_num = eregi_replace("D-","",$order_num);

echo $order_num ;

}

?>

2020-12-20

php : 엑셀파일(excel .xls .csv)로 저장할때 전화번호 앞 0이 빠질때

php에서 엑셀(excel .xls .csv)로 전화번호를 출력하니 전화번호 맨앞에 0이 자동으로 빠져버린다.

1)
해결방법은 style="mso-number-format:'@';" 을 주면 된다.

다음처럼 한다.
<td style="mso-number-format:'@';">01010041004</td>


2) 위처럼 해서 .xls 파일로 저장해서 웹에서 엑셀입력을 했는데, 여전히 맨앞 0이 빠져서 올라가면...

해결방법은 엑셀프로그램에서 .xls 파일을 .xlsx로 다시 저장해서 올리면 문제가 해결된다.

PHP 글자수 계산하기 : EUC-KR, UTF-8 환경에서

 <?
$sms_txt = "한글입니다한글입니다"; 

$t_length = mb_strwidth($sms_txt,'EUC-KR');
 
$t2_length = mb_strwidth($sms_txt); 

echo "$sms_txt // $t_length byte / $t2_length";
// 둘다 결과값이 같다.
?>



<?

$sms_txt = "한글입니다한글입니다."; 

$t_length = mb_strwidth($sms_txt,'UTF-8'); 
$t2_length = mb_strwidth($sms_txt); 

echo "$sms_txt // $t_length byte / $t2_length";

// 둘다 결과값이 같다.

?>