Home > 日常 > あしたさぬきブログ記事の改行コードを変換

あしたさぬきブログ記事の改行コードを変換

  • 2009-08-04 (火) 1:11
  • 日常
  • 作成者:hitotsu
さきほど、あした讃岐のブログ環境設定において「自動改行する」を「自動改行しない」に変更し、過去に投稿したすべてのブログ記事に改行コードを付けました。

やり方は、いったん、MovableType形式で出力して、以下のPHPスクリプトを使って変換しファイルにリダイレクトした後に、ブログ記事でそのファイルを読み込みます。

なお、読み込み前に、すべての記事を削除する必要があります。一覧表示で20件しか表示できないので、何ページにも渡って削除を繰り返しました。

一度投稿済みのブログ記事を削除したため、記事のアクセス数がリセットされてしまいました。これは、仕方がありません。

(追記)記事を投稿した後に致命的なミスに気が付きました。
読み込みで記事のURLが変わってしまったため、過去の記事のすべてのURLが変更になってしまった。
記事から過去の記事をリンクしているのは直せるけど、何よりも検索エンジンが拾っているリンク先が無くなってしまったのが一番残念です。
誰かの役に立つかもしれない過去の記事に対する執着心がなくなってしまった^^;
自分の自由になるBlogシステムじゃないしあきらめることにします。

今後は、<br />タグが自動付与されないので、ソースコードの記述が楽にできることを期待しています。

【変換に使ったPHPスクリプト(お気軽版)】

<?php
    // MovableType形式で出力したブログ記事の改行コードを変換
    // 「自動改行する」を「自動改行しない」に変更する時に利用
    $fname = "blog.txt";    // 変換元のバックアップファイル(MT形式)を指定
    $fp = @fopen( $fname, "rb" );
    $head = "-----";
    $body_start = "BODY:";
    $body_end = "EXTENDED BODY:";
    $in_body = false;
    if ( $fp ) {
        while ( ! feof( $fp ) ) {
            $line = trim( fgets( $fp ) );
            $cmd_flag = false;
            if ( $line == $head ) {
                $cmd = trim( fgets( $fp ) );
                if ( $in_body ) {
                    if ( $cmd == $body_end ) {
                        $in_body = false;
                        echo $line."\r\n";
                        echo $cmd."\r\n";
                    } else {
                        echo nl2br( $line."\r\n" );
                        echo nl2br( $cmd."\r\n" );
                    }
                } else {
                    if ( $cmd == $body_start ) {
                        $in_body = true;
                    }
                    echo $line."\r\n";
                    echo $cmd."\r\n";
                }
            } else {
                if ( $in_body ) {
                    echo nl2br( $line."\r\n" );
                } else {
                    echo $line."\r\n";
                }
            }
        }
        fclose( $fp );
    } else {
        echo "ファイル'$fname'を読み取れません\r\n";
    }
?>