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 "
"; } +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() {