Action disabled: source

맥에서 한글로 도쿠위키 쓰기 (Unicode Nfd in Dokuwiki)

macOS에서 한글로 도쿠위키 (Dokuwiki)를 쓰면 짜증나는 문제가 발생한다… ( http://blog.vaslor.net/233 참조.. )

맥에서의 기본문자 코드는 UTF-8 이지만, 한글을 표시할 때에는 자소단위로 저장을 하고 표시를 한다. 일반적인 UTF-8이 아닌 UTF-8-Mac (Unicode NFD)가 쓰이고 있다. 보통 다른 유니코드를 사용하는 시스템의 파일이름은 UTF-8(Unicode NFC)로 사용되었다.

잘 설명된 문서가 있으니 참고한다.

이로 인한 문제가 발생할 수 있다. (네이버 클라우드도)

유니코드 등가성 및 정규화

음.. 따져보자….

  • 도쿠위키는 자료저장에 DB를 사용하지 않고, 파일을 사용한다.
  • OSX는 파일을 저장할 때 파일이름에 일반적인 유니코드 UTF-8(Unicode NFC) 를 사용하지 않고, 조금 다른 (그러나 역시 표준인) 유니코드 UTF-8-Mac (Unicode NFD) 를 사용한다. (그냥 문서작성에는 상관없다.)
  • 한글은 유니코드로 표시된다.

따라서 같은 문제가 발생한다. (문서작성은 상관 없고, 파일 업로드 할 때 문제…) 일반적인 웹에서는 UTF-8-Mac (Unicode NFD) 도 그냥 유니코드로 인식하므로, 그냥 별다른 에러나 경고 없이 작동되고 표시된다. 하지만, 명백히 다른 코드로 파일이름이 저장되므로, 검색이나 파일 참조 시에는 파일이 없다(!) 라는 식의 문제가 발생한다.

해결

php에는 normalizer::normalize라는 함수가 있어 해결이 가능하다.

리눅스의 경우 다음의 명령어로 해당 PHP 모듈을 설치할 수 있다.

sudo apt install php-intl

도쿠위키 기본설명서 ( pagename )에 힌트가 나와 있어서 해결했다.

inc/utf8.php의 330 줄 부근의 utf8_strlower 함수를 다음과 같이 수정하면 된다.

    function utf8_strtolower($string){
        if(UTF8_MBSTRING) return normalizer::normalize(mb_strtolower($string,'utf-8'));
 
        global $UTF8_UPPER_TO_LOWER;
        return strtr($string,$UTF8_UPPER_TO_LOWER);
    }

도쿠위키업데이트 될 때마다 해줘야 한다. 패치로 포함되었다.

역링크