์ธํฐ๋ท Web๋ธ๋ผ์ฐ์ ๋ก ๋ณต์ฌํ๊ธฐ๋ฅผ ํ๋๋ฐ ํ๊ธ์ด ๋์ด์ ธ ๋ณด์ด๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ฐ๋ น ๊ฐ์ ์ ๊ตญ๊ฐ๋ฅผ ํ์ดํํ์ด๋ ์ค์ ๋ฐ์ดํฐ๋ ๋ค๋ฅด๋ค.
"NFC (์๋์ฐ ๊ธฐ๋ณธ)" ์ผ๋ก ์์ฑ
๋ํด๋ฌผ๊ณผ ๋ฐฑ๋์ฐ์ด ๋ง๋ฅด๊ณ ๋ณ๋๋ก
ํ๋๋์ด ๋ณด์ฐํ์ฌ ์ฐ๋ฆฌ๋๋ผ ๋ง์ธ
"NFD (MacOS ๊ธฐ๋ณธ)" ์ผ๋ก ์์ฑ
แแ ฉแผแแ ขแแ ฎแฏแแ ช แแ ขแจแแ ฎแแ กแซแแ ต แแ กแ แ ณแแ ฉ แแ กแถแแ ฉแ แ ฉแจ
แแ กแแ ณแแ ตแทแแ ต แแ ฉแแ ฎแแ กแแ ก แแ ฎแ แ ตแแ กแ แ ก แแ กแซแแ ฆ
Chrome๊ฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ธ์ ํ๊ธฐํ ๋, NFD ๋ฌธ์์ด์ ์๋์ผ๋ก NFC ๋ก ์นํํด์ฃผ์ง๋ง
์ด๊ฒ์ ์น์์์ Ctrl + C๋ฅผ ๋๋ฌ์ ๋ณต์ฌํ๊ฒ ๋๋ฉด ๋ค๋ฅธ๊ฐ์ผ๋ก ๋ณด์ด๊ฒ ๋๋ค.
์ด ๊ฐ์ NFD-> NFC ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๋ฐฉ๋ฒ์ด ์๋๋ฐ Javascript ์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ์ด๋ณด๊ณ ์ ํ๋ค.
String.prototype.normalize()
๋ก ์นํ ๊ฐ๋ฅํ๋ค.
Mdn Web Docs ์์
// ๊ฒฐํฉ๋ ํ๊ธ ๋ฌธ์์ด
// U+D55C: ํ(HANGUL SYLLABLE HAN)
// U+AE00: ๊ธ(HANGUL SYLLABLE GEUL)
var first = "\uD55C\uAE00";
// ์ ๊ทํ ์ ์ค ๋ถํด (NFD)
// ์ ์ค ๋ถํด ๊ฒฐ๊ณผ ์ด์ฑ, ์ค์ฑ, ์ข
์ฑ์ ์์๋ถ๋ฆฌ๊ฐ ์ผ์ด๋ฉ๋๋ค.
// ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์๋ ๊ฒฐ๊ณผ๊ฐ 'แแ
กแซแแ
ณแฏ'์ด ์์๋ถ๋ฆฌ๋ ์ํ๋ก ๋ณด์ฌ์ง ์ ์์ต๋๋ค.
// U+1112: แ(HANGUL CHOSEONG HIEUH)
// U+1161: แ
ก(HANGUL JUNGSEONG A)
// U+11AB: แซ(HANGUL JONGSEONG NIEUN)
// U+1100: แ(HANGUL CHOSEONG KIYEOK)
// U+1173: แ
ณ(HANGUL JUNGSEONG EU)
// U+11AF: แฏ(HANGUL JONGSEONG RIEUL)
var second = first.normalize("NFD"); // '\u1112\u1161\u11AB\u1100\u1173\u11AF'
// ์ ๊ทํ ์ ์ค ๊ฒฐํฉ (NFC)
// ์ ์ค ๊ฒฐํฉ ๊ฒฐ๊ณผ ์์๋ถ๋ฆฌ ๋์๋ ํ๊ธ์ด ๊ฒฐํฉ๋ฉ๋๋ค.
// U+D55C: ํ(HANGUL SYLLABLE HAN)
// U+AE00: ๊ธ(HANGUL SYLLABLE GEUL)
var third = second.normalize("NFC"); // '\uD55C\uAE00'
console.log(second === third); // ๊ฐ์ ๊ธ์์ฒ๋ผ ๋ณด์ด์ง๋ง false๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์น์์์๋ ์ด๋ฐ์์ผ๋ก ์นํํ ์๋ ์๋ค.
// ๋ชจ๋ "tile-text" ํด๋์ค๋ฅผ ๊ฐ์ง <p> ์์๋ฅผ ์ ํํฉ๋๋ค.
const elements = document.querySelectorAll('.tile-text');
// ๊ฐ ์์์ ํ
์คํธ ๋ด์ฉ์ NFC๋ก normalizeํฉ๋๋ค.
elements.forEach(element => {
// ํ์ฌ ์์์ ํ
์คํธ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
const originalText = element.textContent;
// NFC ๋ฐฉ์์ผ๋ก normalizeํ ํ ๋ค์ ์ค์ ํฉ๋๋ค.
element.textContent = originalText.normalize('NFC');
});
๋๊ธ