HTMLファイル(静的)をShellで一気に文字コード変換
2006年12月11日Table of Contents
Web系の開発をやっていると、どうしてもぶち当たるLinux系サーバーとIISサーバーでの文字コードの違い。
さらには、ブラウザによっての文字コード対応状況の違い。特に、PCとモバイル。
PCでは、SJIS・EUC・UTF-8はほとんどサポート済みなんですけど、モバイルではEUCやUTF-8が使えなかったりします。
そこで、サーバー上の静的なHTMLファイルを一括して文字コード変換を行うShell。
どこかのサイトで見かけて参考にさせて頂いたんですけど、これは結構便利。
というわけで・・・・こちらへもメモx2。
まずは、以下のShellを作成。
※1行目のパスは使用しているサーバーへ一致させること!
※Shell内部で [ nkf ]を使用しているので、nkfをインストールするのが条件
※サブディレクトリへの再帰的な文字コード変換には多分、未対応
EUC-JP⇒Shift-JISへの文字コード変換
$vim euc2sjis.sh #! /bin/sh test -z "$1" && echo "Usage: htmlconv-sjis <directory>" && exit cd "$1" # HTMLファイルの文字コードを変換する. find . -maxdepth 1 -type f -name '*.html' | while read html; do echo "$html" # 進行状況を表示 # eucに変換 tmpfile=`basename "$html" .html`$$.html nkf -s -Lw $html > $tmpfile mv "$tmpfile" "$html" done # HTMLファイルのヘッダを書き換える. find . -maxdepth 1 -type f -name '*.html' | while read html; do # perlで置換 perl -i -p0777e "s/(<meta\s.*?charset=)\w.*(['\"])/\$1Shift_JIS\$2/gi" "$html" done
Shift-JISからEUC-JPへの文字コード変換
$vim sjis2euc.sh #! /bin/sh test -z "$1" && echo "Usage: htmlconv-euc <directory>" && exit cd "$1" # HTMLファイルの文字コードを変換する. find . -maxdepth 1 -type f -name '*.html' | while read html; do echo "$html" # 進行状況を表示 # eucに変換 tmpfile=`basename "$html" .html`$$.html nkf -e -Lu $html > $tmpfile mv "$tmpfile" "$html" done # HTMLファイルのヘッダを書き換える. find . -maxdepth 1 -type f -name '*.html' | while read html; do # perlで置換 perl -i -p0777e "s/(<meta\s.*?charset=)\w.*(['\"])/\$1EUC-JP\$2/gi" "$html"
おまけ::ファイル内のリンクの拡張子変更( [ .htm ] ⇒ [ .html ] )
$vim htm2html.sh #! /bin/sh test -z "$1" && echo "Usage: htm2html <directory>" && exit cd "$1" # .htm を .html に変換する find . -maxdepth 1 -type f -name '*.htm' | while read htm; do echo "$htm" # 進行状況を表示 mv "$htm" `basename "$htm" .htm`.html done # HTMLファイルの内容を書き換える find . -maxdepth 1 -type f -name '*.html' | while read html; do # HTMLファイルの内容をperlで置換 perl -i -p0777e "s/(<*\s.*?)(src=|href=)(['\"]?)(.*?).html*/\$1\$2\$3\$4.html/gi" "$html" done
実行方法
※各Shellのファイルパスが[ ~/sh ]以下の場合
sh ~/sh/sjis2euc.sh <<変換するHTMLファイルまでのパス>>
sh ~/sh/euc2sjis.sh <<変換するHTMLファイルまでのパス>>
sh ~/sh/htm2html.sh <<変換するHTMLファイルまでのパス>>