lang/php

PHP han2eng

C/H 2015. 3. 5. 08:30

KG이니시스 알리페이에서 영문과 숫자 이외의 상품명은 모두 ILLEGAL_SIGN 에러가 나옴... 알리페이 인데 중국어도 에러.... 온리 영문만... urlencoding을 처리하지 않는건가? PayGate는 잘 되던데...

Alipay URL Example

https://forexprod.alipay.com/exterfaceAssign.htm?alipay_exterface_invoke_assign_client_ip=xxx.xxx.xxx.xxx&subject=HanKeul+JaSo+ByeonHwan+HapNiDa.+Korea(%2B2)&.....



//유니코드를 이용 한글 초성, 중성, 종성으로 쪼개기 - 한글/영문 변환 
function utf8_to_unicode( $str )
{ 
    $unicode = array(); 
    $values = array(); 
    $lookingFor = 1; 
  
    for ($i = 0; $i < strlen( $str ); $i++ )
	{ 
        $thisValue = ord( $str[ $i ] ); 
  
        if ( $thisValue < 128 )
		{
			 $unicode[] = $thisValue; 
		}else{ 
            if ( count( $values ) == 0 ) $lookingFor = ( $thisValue < 224 ) ? 2 : 3; 
  
            $values[] = $thisValue; 
  
            if ( count( $values ) == $lookingFor )
			{ 
                $number = ( $lookingFor == 3 ) ? 
                ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ): 
                ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 ); 
  
                $unicode[] = $number; 
                $values = array(); 
                $lookingFor = 1; 
            }
        }
    }
    return $unicode; 
}
  
function unicode_to_utf8( $str )
{ 
    $utf8 = ''; 
  
    foreach( $str as $unicode )
	{ 
        if ( $unicode < 128 )
		{ 
            $utf8.= chr( $unicode ); 
        }
		elseif ( $unicode < 2048 )
		{ 
  
            $utf8.= chr( 192 +  ( ( $unicode - ( $unicode % 64 ) ) / 64 ) ); 
            $utf8.= chr( 128 + ( $unicode % 64 ) ); 
  
        } else { 
  
            $utf8.= chr( 224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) ); 
            $utf8.= chr( 128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) / 64 ) ); 
            $utf8.= chr( 128 + ( $unicode % 64 ) ); 
  
        }
  
    }
    return $utf8; 
} 
  
/* 변환하고자 하는 언어 예제 - UTF-8로 바꾸기 위해서 iconv 함수를 사용했다. */ 
function han2eng($str1)
{ 
	/* 초중성에 대응하는 영문 알파벳 배열화 */ 
	$LCtable = array("ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"); 
	$MVtable = array("ㅏ","ㅐ","ㅑ","ㅒ","ㅓ","ㅔ","ㅕ","ㅖ","ㅗ","ㅘ","ㅙ","ㅚ","ㅛ","ㅜ","ㅝ","ㅞ","ㅟ","ㅠ","ㅡ","ㅢ","ㅣ"); 
	$TCtable = array("","ㄱ","ㄲ","ㄳ","ㄴ","ㄵ","ㄶ","ㄷ","ㄹ","ㄺ","ㄻ","ㄼ","ㄽ","ㄾ","ㄿ","ㅀ","ㅁ","ㅂ","ㅄ","ㅅ","ㅆ","ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"); 

	$LCetable = array("k","kk","n","d","tt","l","m","b","pp","s","ss","","j","jj","ch","k","t","p","h"); 
	$MVetable = array("a","ae","ya","yae","eo","e","yeo","ye","o","wa","wae","oe","yo","u","wo","we","wi","yu","eu","ui","i"); 
	$TCetable = array("","g","kk","k","n","n","n","t","l","l","l","l","l","l","l","l","m","p","p","s","ss","ng","j","ch","k","t","p","h"); 

	$returnValue = ''; 

	//$str1 = iconv("EUC-KR","UTF-8", $str1); 

	/* UTF-8로 변환된 문장을 유니코드로 변환한다. */ 
	$result = utf8_to_unicode($str1); 

	/*	유니코드로 변환된 글이 한글코드 안에 있으면 초중성으로 분리한다 
		원본에서 약간 수정함. 한글 외 글자에서 중복패턴이 나오는 부분 수정함. 
		단 한글외 [0-9a-Z]는 확인했지만 그 외 문자에서는 확인 해 보지 않음.
	*/ 
	foreach( $result AS $key => $val)
	{
  		if($val >= 44032 && $val <= 55203)
		{ 
			$chr = ""; 
			$code = ""; 
			$temp1 = ""; 
			$code = $val; 
			$temp1 = $code - 44032; 
			$T = (int) $temp1 % 28; 
			$temp1 /= 28; 
			$V = (int) $temp1 % 21; 
			$temp1 /= 21; 
			$L = (int) $temp1; 
			$chr .= $LCetable[$L].$MVetable[$V].$TCetable[$T]; 
			
			$returnValue .= ucfirst($chr);
		} else {
			//$returnValue .= unicode_to_utf8($val);
			$returnValue .= chr($val);
		} 
	} 
	return $returnValue; 
}

/**
 * echo han2eng("한글 자소 변환 합니다. Korea");
 */
반응형