From 8893b112fa2dfda5576545658a686e1a5134123e Mon Sep 17 00:00:00 2001 From: thisgun Date: Thu, 21 Nov 2024 11:58:55 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=ED=8A=B9=EC=88=98?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EA=B0=80=20mysql=20charset=20=EC=9D=B4=20uft?= =?UTF-8?q?8=20=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20=EA=B8=B0=EB=A1=9D?= =?UTF-8?q?=EC=9D=B4=20=EC=95=88=EB=90=98=EB=8A=94=20=ED=98=84=EC=83=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bbs/write_update.php | 6 ++++++ lib/common.lib.php | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/bbs/write_update.php b/bbs/write_update.php index 1f6e151a8..2cfb00601 100644 --- a/bbs/write_update.php +++ b/bbs/write_update.php @@ -31,6 +31,9 @@ $wr_subject = ''; if (isset($_POST['wr_subject'])) { $wr_subject = substr(trim($_POST['wr_subject']),0,255); $wr_subject = preg_replace("#[\\\]+$#", "", $wr_subject); + if (function_exists('normalize_utf8_string')) { + $wr_subject = normalize_utf8_string($wr_subject); + } } if ($wr_subject == '') { $msg[] = '제목을 입력하세요.'; @@ -40,6 +43,9 @@ $wr_content = ''; if (isset($_POST['wr_content'])) { $wr_content = substr(trim($_POST['wr_content']),0,65536); $wr_content = preg_replace("#[\\\]+$#", "", $wr_content); + if (function_exists('normalize_utf8_string')) { + $wr_content = normalize_utf8_string($wr_content); + } } if ($wr_content == '') { $msg[] = '내용을 입력하세요.'; diff --git a/lib/common.lib.php b/lib/common.lib.php index 8eba526d1..dd339a181 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -2280,6 +2280,24 @@ function _callback_bad_tag_convert($matches){ return "
보안문제로 인하여 관리자 아이디로는 embed 또는 object 태그를 볼 수 없습니다. 확인하시려면 관리권한이 없는 다른 아이디로 접속하세요.
"; } +function normalize_utf8_string($string) { + // utf8mb4 환경과 mb_ord 함수가 지원되지 않는 환경에서는 제외한다. + if (G5_DB_CHARSET === 'utf8mb4' || !function_exists('mb_ord')) { + return $string; + } + + // Unicode 특수 문자를 일반 문자로 변환 + $normalized = preg_replace_callback('/[\x{1D400}-\x{1D7FF}]/u', '_callback_normalizeString', $string); + + return $normalized; +} + +function _callback_normalizeString($matches){ + $charCode = mb_ord($matches[0], 'UTF-8'); + // 변환 테이블에서 일반 문자로 매핑 + return chr(($charCode - 0x1D400) % 26 + ord('A')); +} + // 토큰 생성 function _token() {