EunsooD

MySQL에서 HTML Entity Decode하기 본문

STUDY/DB(MongoDB)

MySQL에서 HTML Entity Decode하기

EunsooD 2020. 4. 7. 17:55
반응형

MySQL에 데이터를 저장 할 때

HTML 코드표 때문에 데이터를 변형하여 저장하는 경우가 있다.

 

EX) 아래 표 참고

<

&#60;

&lt;

보다 작은

=

&#61;

-

등호

>

&#62;

&gt;

보다 큰

위와 같이 꺽쇠나 등호기호 쉼표 따옴표 등

특수 문자를 변형하여 저장하는 경우가 있다.

 

데이터가 저렇게 들어가 있는데,

Query 할 때 원상 복구 싶다면

DB에 Function을 추가해줘야 한다.

( 기본적으로 제공하지 않는다. )

 

아래 내용을 선언해주면 함수가 생기고

내용 호출 시 저 함수를 적용하면 잘 변환이 된다.

 

SELECT HTML_UnEncode(title), title FROM table WHERE num = 1;

 

 

 

 

출처 : https://stackoverflow.com/questions/3678980/is-there-a-mysql-function-to-decode-html-entities

 

is there a mysql function to decode html entities?

i was wondering if there is a MYSQL function to decode text with html entities. I have seen some approaches using REPLACE but it looks kinda hard to manage all the entities.

stackoverflow.com

 

코드 확인 ↓

더보기

DELIMITER $$
DROP FUNCTION IF EXISTS `HTML_UnEncode`$$
CREATE FUNCTION `HTML_UnEncode`(X TEXT CHARSET UTF8) RETURNS VARCHAR(255) CHARSET UTF8 DETERMINISTIC
BEGIN
    DECLARE TextString TEXT CHARSET UTF8;

    -- convert "double" ampersand encodings
    IF INSTR(X, '&') THEN
        SET TextString = REPLACE(TextString, '&', '&');
        SET X = REPLACE(X, '&', '&');
    END IF;

    SET TextString = X;

    #quotation mark 
    IF
        INSTR(X, '"') THEN
        SET TextString =
                REPLACE(TextString, '"', '"');
    END IF;
    #apostrophe  
    IF INSTR(X, ''')
    THEN
        SET TextString = REPLACE(TextString, ''', '"') ;
    END IF;

    #ampersand 
    IF
        INSTR(X, '&') THEN
        SET TextString =
                REPLACE(TextString, '&', '&');
    END IF;

    #less-than 
    IF
        INSTR(X, '<') THEN
        SET TextString =
                REPLACE(TextString, '<', '<');
    END IF;

    #greater-than 
    IF
        INSTR(X, '>') THEN
        SET TextString =
                REPLACE(TextString, '>', '>');
    END IF;


    #non-breaking space - double encoded
    IF
        INSTR(X, '&nbsp;') THEN
        SET TextString =
                REPLACE(TextString, '&nbsp;', 'X');
    END IF;

    #non-breaking space - double encoded
    IF
        INSTR(X, ' ') THEN
        SET TextString =
                REPLACE(TextString, ' ', ' ');
    END IF;

    #inverted exclamation mark 
    IF
        INSTR(X, '¡') THEN
        SET TextString =
                REPLACE(TextString, '¡', '¡');
    END IF;

    #cent 
    IF
        INSTR(X, '¢') THEN
        SET TextString =
                REPLACE(TextString, '¢', '¢');
    END IF;

    #pound 
    IF
        INSTR(X, '£') THEN
        SET TextString =
                REPLACE(TextString, '£', '£');
    END IF;

    #currency 
    IF
        INSTR(X, '¤') THEN
        SET TextString =
                REPLACE(TextString, '¤', '¤');
    END IF;

    #yen 
    IF
        INSTR(X, '¥') THEN
        SET TextString =
                REPLACE(TextString, '¥', '¥');
    END IF;

    #broken vertical bar 
    IF
        INSTR(X, '¦') THEN
        SET TextString =
                REPLACE(TextString, '¦', '¦');
    END IF;

    #section 
    IF
        INSTR(X, '§') THEN
        SET TextString =
                REPLACE(TextString, '§', '§');
    END IF;

    #spacing diaeresis 
    IF
        INSTR(X, '¨') THEN
        SET TextString =
                REPLACE(TextString, '¨', '¨');
    END IF;

    #copyright 
    IF
        INSTR(X, '©') THEN
        SET TextString =
                REPLACE(TextString, '©', '©');
    END IF;

    #feminine ordinal indicator 
    IF
        INSTR(X, 'ª') THEN
        SET TextString =
                REPLACE(TextString, 'ª', 'ª');
    END IF;

    #angle quotation mark (left) 
    IF
        INSTR(X, '«') THEN
        SET TextString =
                REPLACE(TextString, '«', '«');
    END IF;

    #negation 
    IF
        INSTR(X, '¬') THEN
        SET TextString =
                REPLACE(TextString, '¬', '¬');
    END IF;

    #soft hyphen 
    IF
        INSTR(X, '­') THEN
        SET TextString =
                REPLACE(TextString, '­', '­');
    END IF;

    #registered trademark 
    IF
        INSTR(X, '®') THEN
        SET TextString =
                REPLACE(TextString, '®', '®');
    END IF;

    #spacing macron 
    IF
        INSTR(X, '¯') THEN
        SET TextString =
                REPLACE(TextString, '¯', '¯');
    END IF;

    #degree 
    IF
        INSTR(X, '°') THEN
        SET TextString =
                REPLACE(TextString, '°', '°');
    END IF;

    #plus-or-minus  
    IF
        INSTR(X, '±') THEN
        SET TextString =
                REPLACE(TextString, '±', '±');
    END IF;

    #superscript 2 
    IF
        INSTR(X, '²') THEN
        SET TextString =
                REPLACE(TextString, '²', '²');
    END IF;

    #superscript 3 
    IF
        INSTR(X, '³') THEN
        SET TextString =
                REPLACE(TextString, '³', '³');
    END IF;

    #spacing acute 
    IF
        INSTR(X, '´') THEN
        SET TextString =
                REPLACE(TextString, '´', '´');
    END IF;

    #micro 
    IF
        INSTR(X, 'µ') THEN
        SET TextString =
                REPLACE(TextString, 'µ', 'µ');
    END IF;

    #paragraph 
    IF
        INSTR(X, '¶') THEN
        SET TextString =
                REPLACE(TextString, '¶', '¶');
    END IF;

    #middle dot 
    IF
        INSTR(X, '·') THEN
        SET TextString =
                REPLACE(TextString, '·', '·');
    END IF;

    #spacing cedilla 
    IF
        INSTR(X, '¸') THEN
        SET TextString =
                REPLACE(TextString, '¸', '¸');
    END IF;

    #superscript 1 
    IF
        INSTR(X, '¹') THEN
        SET TextString =
                REPLACE(TextString, '¹', '¹');
    END IF;

    #masculine ordinal indicator 
    IF
        INSTR(X, 'º') THEN
        SET TextString =
                REPLACE(TextString, 'º', 'º');
    END IF;

    #angle quotation mark (right) 
    IF
        INSTR(X, '»') THEN
        SET TextString =
                REPLACE(TextString, '»', '»');
    END IF;

    #fraction 1/4 
    IF
        INSTR(X, '¼') THEN
        SET TextString =
                REPLACE(TextString, '¼', '¼');
    END IF;

    #fraction 1/2 
    IF
        INSTR(X, '½') THEN
        SET TextString =
                REPLACE(TextString, '½', '½');
    END IF;

    #fraction 3/4 
    IF
        INSTR(X, '¾') THEN
        SET TextString =
                REPLACE(TextString, '¾', '¾');
    END IF;

    #inverted question mark 
    IF
        INSTR(X, '¿') THEN
        SET TextString =
                REPLACE(TextString, '¿', '¿');
    END IF;

    #multiplication 
    IF
        INSTR(X, '×') THEN
        SET TextString =
                REPLACE(TextString, '×', '×');
    END IF;

    #division 
    IF
        INSTR(X, '÷') THEN
        SET TextString =
                REPLACE(TextString, '÷', '÷');
    END IF;

    #capital a, grave accent 
    IF
        INSTR(X, 'À') THEN
        SET TextString =
                REPLACE(TextString, 'À', 'À');
    END IF;

    #capital a, acute accent 
    IF
        INSTR(X, 'Á') THEN
        SET TextString =
                REPLACE(TextString, 'Á', 'Á');
    END IF;

    #capital a, circumflex accent 
    IF
        INSTR(X, 'Â') THEN
        SET TextString =
                REPLACE(TextString, 'Â', 'Â');
    END IF;

    #capital a, tilde 
    IF
        INSTR(X, 'Ã') THEN
        SET TextString =
                REPLACE(TextString, 'Ã', 'Ã');
    END IF;

    #capital a, umlaut mark 
    IF
        INSTR(X, 'Ä') THEN
        SET TextString =
                REPLACE(TextString, 'Ä', 'Ä');
    END IF;

    #capital a, ring 
    IF
        INSTR(X, 'Å') THEN
        SET TextString =
                REPLACE(TextString, 'Å', 'Å');
    END IF;

    #capital ae 
    IF
        INSTR(X, 'Æ') THEN
        SET TextString =
                REPLACE(TextString, 'Æ', 'Æ');
    END IF;

    #capital c, cedilla 
    IF
        INSTR(X, 'Ç') THEN
        SET TextString =
                REPLACE(TextString, 'Ç', 'Ç');
    END IF;

    #capital e, grave accent 
    IF
        INSTR(X, 'È') THEN
        SET TextString =
                REPLACE(TextString, 'È', 'È');
    END IF;

    #capital e, acute accent 
    IF
        INSTR(X, 'É') THEN
        SET TextString =
                REPLACE(TextString, 'É', 'É');
    END IF;

    #capital e, circumflex accent 
    IF
        INSTR(X, 'Ê') THEN
        SET TextString =
                REPLACE(TextString, 'Ê', 'Ê');
    END IF;

    #capital e, umlaut mark 
    IF
        INSTR(X, 'Ë') THEN
        SET TextString =
                REPLACE(TextString, 'Ë', 'Ë');
    END IF;

    #capital i, grave accent 
    IF
        INSTR(X, 'Ì') THEN
        SET TextString =
                REPLACE(TextString, 'Ì', 'Ì');
    END IF;

    #capital i, acute accent 
    IF
        INSTR(X, 'Í') THEN
        SET TextString =
                REPLACE(TextString, 'Í', 'Í');
    END IF;

    #capital i, circumflex accent 
    IF
        INSTR(X, 'Î') THEN
        SET TextString =
                REPLACE(TextString, 'Î', 'Î');
    END IF;

    #capital i, umlaut mark 
    IF
        INSTR(X, 'Ï') THEN
        SET TextString =
                REPLACE(TextString, 'Ï', 'Ï');
    END IF;

    #capital eth, Icelandic 
    IF
        INSTR(X, 'Ð') THEN
        SET TextString =
                REPLACE(TextString, 'Ð', 'Ð');
    END IF;

    #capital n, tilde 
    IF
        INSTR(X, 'Ñ') THEN
        SET TextString =
                REPLACE(TextString, 'Ñ', 'Ñ');
    END IF;

    #capital o, grave accent 
    IF
        INSTR(X, 'Ò') THEN
        SET TextString =
                REPLACE(TextString, 'Ò', 'Ò');
    END IF;

    #capital o, acute accent 
    IF
        INSTR(X, 'Ó') THEN
        SET TextString =
                REPLACE(TextString, 'Ó', 'Ó');
    END IF;

    #capital o, circumflex accent 
    IF
        INSTR(X, 'Ô') THEN
        SET TextString =
                REPLACE(TextString, 'Ô', 'Ô');
    END IF;

    #capital o, tilde 
    IF
        INSTR(X, 'Õ') THEN
        SET TextString =
                REPLACE(TextString, 'Õ', 'Õ');
    END IF;

    #capital o, umlaut mark 
    IF
        INSTR(X, 'Ö') THEN
        SET TextString =
                REPLACE(TextString, 'Ö', 'Ö');
    END IF;

    #capital o, slash 
    IF
        INSTR(X, 'Ø') THEN
        SET TextString =
                REPLACE(TextString, 'Ø', 'Ø');
    END IF;

    #capital u, grave accent 
    IF
        INSTR(X, 'Ù') THEN
        SET TextString =
                REPLACE(TextString, 'Ù', 'Ù');
    END IF;

    #capital u, acute accent 
    IF
        INSTR(X, 'Ú') THEN
        SET TextString =
                REPLACE(TextString, 'Ú', 'Ú');
    END IF;

    #capital u, circumflex accent 
    IF
        INSTR(X, 'Û') THEN
        SET TextString =
                REPLACE(TextString, 'Û', 'Û');
    END IF;

    #capital u, umlaut mark 
    IF
        INSTR(X, 'Ü') THEN
        SET TextString =
                REPLACE(TextString, 'Ü', 'Ü');
    END IF;

    #capital y, acute accent 
    IF
        INSTR(X, 'Ý') THEN
        SET TextString =
                REPLACE(TextString, 'Ý', 'Ý');
    END IF;

    #capital THORN, Icelandic 
    IF
        INSTR(X, 'Þ') THEN
        SET TextString =
                REPLACE(TextString, 'Þ', 'Þ');
    END IF;

    #small sharp s, German 
    IF
        INSTR(X, 'ß') THEN
        SET TextString =
                REPLACE(TextString, 'ß', 'ß');
    END IF;

    #small a, grave accent 
    IF
        INSTR(X, 'à') THEN
        SET TextString =
                REPLACE(TextString, 'à', 'à');
    END IF;

    #small a, acute accent 
    IF
        INSTR(X, 'á') THEN
        SET TextString =
                REPLACE(TextString, 'á', 'á');
    END IF;

    #small a, circumflex accent 
    IF
        INSTR(X, 'â') THEN
        SET TextString =
                REPLACE(TextString, 'â', 'â');
    END IF;

    #small a, tilde 
    IF
        INSTR(X, 'ã') THEN
        SET TextString =
                REPLACE(TextString, 'ã', 'ã');
    END IF;

    #small a, umlaut mark 
    IF
        INSTR(X, 'ä') THEN
        SET TextString =
                REPLACE(TextString, 'ä', 'ä');
    END IF;

    #small a, ring 
    IF
        INSTR(X, 'å') THEN
        SET TextString =
                REPLACE(TextString, 'å', 'å');
    END IF;

    #small ae 
    IF
        INSTR(X, 'æ') THEN
        SET TextString =
                REPLACE(TextString, 'æ', 'æ');
    END IF;

    #small c, cedilla 
    IF
        INSTR(X, 'ç') THEN
        SET TextString =
                REPLACE(TextString, 'ç', 'ç');
    END IF;

    #small e, grave accent 
    IF
        INSTR(X, 'è') THEN
        SET TextString =
                REPLACE(TextString, 'è', 'è');
    END IF;

    #small e, acute accent 
    IF
        INSTR(X, 'é') THEN
        SET TextString =
                REPLACE(TextString, 'é', 'é');
    END IF;

    #small e, circumflex accent 
    IF
        INSTR(X, 'ê') THEN
        SET TextString =
                REPLACE(TextString, 'ê', 'ê');
    END IF;

    #small e, umlaut mark 
    IF
        INSTR(X, 'ë') THEN
        SET TextString =
                REPLACE(TextString, 'ë', 'ë');
    END IF;

    #small i, grave accent 
    IF
        INSTR(X, 'ì') THEN
        SET TextString =
                REPLACE(TextString, 'ì', 'ì');
    END IF;

    #small i, acute accent 
    IF
        INSTR(X, 'í') THEN
        SET TextString =
                REPLACE(TextString, 'í', 'í');
    END IF;

    #small i, circumflex accent 
    IF
        INSTR(X, 'î') THEN
        SET TextString =
                REPLACE(TextString, 'î', 'î');
    END IF;

    #small i, umlaut mark 
    IF
        INSTR(X, 'ï') THEN
        SET TextString =
                REPLACE(TextString, 'ï', 'ï');
    END IF;

    #small eth, Icelandic 
    IF
        INSTR(X, 'ð') THEN
        SET TextString =
                REPLACE(TextString, 'ð', 'ð');
    END IF;

    #small n, tilde 
    IF
        INSTR(X, 'ñ') THEN
        SET TextString =
                REPLACE(TextString, 'ñ', 'ñ');
    END IF;

    #small o, grave accent 
    IF
        INSTR(X, 'ò') THEN
        SET TextString =
                REPLACE(TextString, 'ò', 'ò');
    END IF;

    #small o, acute accent 
    IF
        INSTR(X, 'ó') THEN
        SET TextString =
                REPLACE(TextString, 'ó', 'ó');
    END IF;

    #small o, circumflex accent 
    IF
        INSTR(X, 'ô') THEN
        SET TextString =
                REPLACE(TextString, 'ô', 'ô');
    END IF;

    #small o, tilde 
    IF
        INSTR(X, 'õ') THEN
        SET TextString =
                REPLACE(TextString, 'õ', 'õ');
    END IF;

    #small o, umlaut mark 
    IF
        INSTR(X, 'ö') THEN
        SET TextString =
                REPLACE(TextString, 'ö', 'ö');
    END IF;

    #small o, slash 
    IF
        INSTR(X, 'ø') THEN
        SET TextString =
                REPLACE(TextString, 'ø', 'ø');
    END IF;

    #small u, grave accent 
    IF
        INSTR(X, 'ù') THEN
        SET TextString =
                REPLACE(TextString, 'ù', 'ù');
    END IF;

    #small u, acute accent 
    IF
        INSTR(X, 'ú') THEN
        SET TextString =
                REPLACE(TextString, 'ú', 'ú');
    END IF;

    #small u, circumflex accent 
    IF
        INSTR(X, 'û') THEN
        SET TextString =
                REPLACE(TextString, 'û', 'û');
    END IF;

    #small u, umlaut mark 
    IF
        INSTR(X, 'ü') THEN
        SET TextString =
                REPLACE(TextString, 'ü', 'ü');
    END IF;

    #small y, acute accent 
    IF
        INSTR(X, 'ý') THEN
        SET TextString =
                REPLACE(TextString, 'ý', 'ý');
    END IF;

    #small thorn, Icelandic 
    IF
        INSTR(X, 'þ') THEN
        SET TextString =
                REPLACE(TextString, 'þ', 'þ');
    END IF;

    #small y, umlaut mark 
    IF
        INSTR(X, 'ÿ') THEN
        SET TextString =
                REPLACE(TextString, 'ÿ', 'ÿ');
    END IF;
    
    # Additional 
    IF
        INSTR(X, '™') THEN
        SET TextString =
                REPLACE(TextString, '™', '™');
    END IF;

    IF
        INSTR(X, '“') THEN
        SET TextString =
                REPLACE(TextString, '“', '“');
    END IF;

    IF
        INSTR(X, '”') THEN
        SET TextString =
                REPLACE(TextString, '”', '”');
    END IF;
    
    
    RETURN TextString;
END$$

DELIMITER ;

반응형

'STUDY > DB(MongoDB)' 카테고리의 다른 글

MySQL 테이블 구조 그대로 복사하기  (0) 2018.08.29
Comments