PHP에서 HEXDEC 함수는 육각 문자열을 10 진수로 변환하는 데 사용됩니다. 이 기능은 매우 간단하고 사용하기 쉽지만 사용하면 입력 문자열 형식에주의를 기울이지 않으면 심각한 논리 오류가 발생할 수 있습니다. 이 기사는 개발자가 HEXDEC를 사용할 때 무시할 수있는 일부 문자열 서식 문제에 중점을두고 예제를 통해 이러한 함정을 피하는 방법을 분석합니다.
Hexdec은 문자열 매개 변수를 수신하고이를 16 진수로 취급하고 해당 소수점 값을 반환합니다. 예를 들어:
<코드> <? php echo hexdec ( '1a'); // output 26?> </code>이 사용법은 가장 일반적이지만 입력이 표준화되지 않은 시나리오에서 문제가 종종 발생합니다.
PHP는 16 진수에서 문자 부분 (AFS)에 민감하지는 않지만 통합 코딩 스타일을 유지하는 것이 좋습니다. 예를 들어:
<코드> <? php echo hexdec ( '1a'); // output 26 echo hexdec ( '1a'); // 또한 26?> </code>이것은 버그가 아니지만 개발 팀의 누군가가 실수로 어퍼 케이스와 소문에 차이가 있다고 생각하면 혼란을 유발할 수 있습니다.
일반적인 오류는 0x 또는 # 접두사를 포함하는 문자열을 Heydec 에 직접 전달하여 자동으로 처리 될 것으로 예상하는 것입니다.
<코드> <? php echo hexdec ( '0x1a'); // '0x1a'의 'x'가 16 진 문자가 아니기 때문에 실제 출력은 0입니다.> </code>이 작업을 수행하는 올바른 방법은 접두사를 수동으로 제거하는 것입니다.
<코드> <? php $ hex = '0x1a'; $ clean = str_replace ( '0x', '', strtolower ($ hex)); echo hexdec ($ clean); // output 26?> </code>HEXDEC이 HEXADECIMAL이 아닌 캐릭터를 만나면 첫 번째 불법 캐릭터가 발생하면 구문 분석을 중지하고 오류가 없으며 일부 결과 만 반환됩니다. 이런 종류의 "관용"행동은 숨겨진 위험을 초래할 수 있습니다.
<코드> <? php echo hexdec ( '1a2g'); // output 418은 실제로 g?> </code>를 무시합니다따라서 정규 표현식을 사용하여 문자열에 Hexdec을 호출하기 전에 유효한 문자 만 포함되어 있는지 확인하는 것이 좋습니다.
<코드> <? php $ input = '1a2g'; if (preg_match ( '/^[0-9a-fa-f]+$/', $ input)) {echo hexdec ($ input); } else {echo "불법 16 진수"; }?> </code>16 진 문자열이 사용자 입력에서 나오면 URL 매개 변수입니다.
<code> <? php // 액세스 https://gitbox.net/script.php?color=ff0000 $ color = $ _get [ 'color'] ?? '000000'; if (preg_match ( '/^[0-9a-fa-f] {6} $/', $ color)) {
$ red = hexdec (substr ($ color, 0, 2));
$ green = hexdec (substr ($ color, 2, 2));
$ blue = hexdec (substr ($ color, 4, 2));
echo "rgb : $ red, $ green, $ blue";
} 또 다른 {
에코 "색상 매개 변수는 불법입니다";
}
?>
</코드>
이러한 종류의 사용 시나리오는 매우 일반적이지만 확인하지 않으면 색상 오류 또는 코드 오류가 발생할 수 있습니다.
쉽게 간과되는 또 다른 문제는 빈 줄이나 널로 전달하는 것입니다.
<코드> <? php echo hexdec ( ''); // output 0 echo hexdec (null); // output 0?> </code>이것은 PHP의 버그가 아니라 HEXDEC 의 설계 동작입니다. 입력을 엄격히 점검하려면 호출하기 전에 비어 있지 않은지 확인해야합니다.
<code> <? php function safe_hexdec ($ value) {if (! is_string ($ value) || trim ($ value) === '') {새로운 invalidArgumentException ( 'invalid hex input'); } if (! preg_match ( '/^[0-9a-fa-f]+$/', $ value) {throw new invalidargumentexception ( '불법 16 진 형식'); } return hexdec ($ value); }?> </code>HEXDEC 은 매우 기본적인 기능이지만 실제 개발에서 입력 형식의 정규화가 무시되면 코드 동작은 예측할 수 없게 될 수 있습니다. 특히 사용자 입력, URL 매개 변수 및 구성 데이터를 처리 할 때는 프로그램의 견고성과 보안을 보장하기 위해 항상 형식 확인 및 예외 관리를 수행해야합니다.