Skip to content

Instantly share code, notes, and snippets.

@halsk
Created June 30, 2010 02:21
Show Gist options
  • Save halsk/458133 to your computer and use it in GitHub Desktop.
Save halsk/458133 to your computer and use it in GitHub Desktop.
;; http://taiyaki.org/elisp/urlencode/
;; にある urlencode.el のデフォルトをutf-8にして、Emacs3 用に関数を修正
(defvar urlencode-default-coding-system 'utf-8)
;(defvar urlencode-default-coding-system 'sjis)
(defvar urlencode-exceptional-chars "[a-zA-Z0-9]")
(global-set-key "\C-x\C-me" 'urlencode-region)
(global-set-key "\C-x\C-md" 'urldecode-region)
; \C-x\C-me
(defun urlencode-region (begin end &optional cdp)
(interactive "r\nP")
(let* ((coding-system (and cdp (read-coding-system "Coding-system: ")))
(encoded (urlencode (buffer-substring begin end) coding-system)))
(delete-region begin end)
(insert encoded)))
; \C-x\C-md
(defun urldecode-region (begin end &optional cdp)
(interactive "r\nP")
(let* ((coding-system (and cdp (read-coding-system "Coding-system: ")))
(decoded (urldecode (buffer-substring begin end) coding-system)))
(delete-region begin end)
(insert decoded)))
(defun urlencode-string (str &optional cdp)
(interactive "sString: \nP")
(let ((coding-system (and cdp (read-coding-system "Coding-system: "))))
(insert (urlencode str coding-system))))
(defun urldecode-string (str &optional cdp)
(interactive "sString: \nP")
(let ((coding-system (and cdp (read-coding-system "Coding-system: "))))
(insert (urldecode str coding-system))))
(defun urlencode (str &optional coding-system)
(mapconcat
(lambda (c)
(format (if (string-match urlencode-exceptional-chars (char-to-string c))
"%c" "%%%02X") c))
(encode-coding-string str
(or coding-system urlencode-default-coding-system))
""))
(defun urldecode (str &optional coding-system)
(let (pos
decoded)
(while (setq pos (string-match "%.." str))
(setq decoded
(concat decoded (substring str 0 pos)
(format "%c"
(string-to-number (substring str (+ pos 1) (+ pos 3)) 16)))
str (substring str (+ pos 3))))
(decode-coding-string (concat decoded str)
(or coding-system urlencode-default-coding-system))))
; $Id: urlencode.el,v 1.3 2010/6/26 03:51:34 hal Exp $
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment