Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 CSS가 어려운 이유 — 프로젝트 중심 실전 CSS 강의 소개 2023-04-13
📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

< 따위 글자를 원래대로 돌려주는 php함수 – htmlspecialchars_decode.php 구현함수

먼저, 출처는 http://jacking.x-y.net/entry/htmlspecialchars-htmlspecialcharsdecode-사용 이다.

cut_len따위의 이름으로 만들어진, 문자열을 잘라 주는 함수를 많이들 다뤄 봤을 거다. 인코딩도 귀찮은 일이지만, & l t ; 나 & g t ; 같은 글자들이 중간에 잘리는 게 보기 싫게 잘리는 경우가 있다. 게다가 저런 아이들은 4글자로 처리가 되니 저런 아이들이 들어 있는 경우는 의도한 것보다 더 짧게 잘린다.

그걸 해결하려면 아래처럼 코드를 작성하면 될 터.

$text='<조선일보>는 쓰레깁니다.';
$text=htmlspecialchars_decode($text);
$text=cut_len($text);
$text=htmlspecialchars($text);
return $text;

뭐 이런 식으로다가 말이다. 그런데 한 가지 문제가 있다. htmlspecialchars_decode는 PHP5부터 있는 함수다. PHP4에서 불가피하게 돌려야 하는 홈페이지는 위 함수를 사용할 수 없고 알아서 만들어 써야 한다.

나도 그럴까 생각했지만, PHP 함수를 js로 구현해 놓은 것도 발견한 마당에 PHP5의 함수를 누군가 구현해 놓은 게 분명 있을 거라 생각, 검색을 해 봤는데 찾은 것이다.

코드는 아래와 같다.

//for php4
function htmlspecialchars_decode($string, $quote_style = null)
    {
        // Sanity check
        if (!is_scalar($string)) {
            user_error('htmlspecialchars_decode() expects parameter 1 to be string, ' .
                gettype($string) . ' given', E_USER_WARNING);
            return;
        }

        if (!is_int($quote_style) && $quote_style !== null) {
            user_error('htmlspecialchars_decode() expects parameter 2 to be integer, ' .
                gettype($quote_style) . ' given', E_USER_WARNING);
            return;
        }

        // Init
        $from   = array('&', '<', '>');
        $to     = array('&', '<', '>');

        // The function does not behave as documented
        // This matches the actual behaviour of the function
        if ($quote_style & ENT_COMPAT || $quote_style & ENT_QUOTES) {
            $from[] = '"';
            $to[]   = '"';

            $from[] = ''';
            $to[]   = "'";
        }

        return str_replace($from, $to, $string);
    }

그럼, 도움이 됐길.

[덧] 이 글을 작성하고 나니 PHP4에서도 작동하는 함수를 발견할 수 있었다;; 아래 링크를 참고하라.

http://www.php.net/manual/en/function.html-entity-decode.php

[덧2] 위 html-entity-decode 함수를 사용하니까 깨지는 글자가 발생했다. 그래서 htmlspecialchars_decode 함수를 사용하기로 했다.

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

댓글 (1개)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다