URLの変更を伴うサイト・ブログの移転に際に、内部リンクの張り替え作業が必要になります。
単純にドメイン名の部分だけが変更になるのであれば、テキストエディタなどの置換機能を使えばできます。しかし、URLのファイル名を含めて全く異なるURLに変わる場合はそれぞれの対応ごとに置換する必要があるため、通常の置換機能では難しいです。
そこで、必要な分の置換ペアを連想配列形式で作っておき、それを基に記事を書き替えるスクリプトを作りました。
【無料ブログの移転】個別記事ごとにcanonical付与とリダイレクトを行う方法【JavaScript】で作成した、新旧URL対照表の連想配列を使用できます。
これはURLの置換だけではなく文字列の置換にも利用できます。
一応断りとして私はプログラミングの素人である点はご了承ください。
このスクリプトを利用した結果、正常に出力されているか確認してください。
このスクリプトでは以下のようなJSON形式の連想配列を使います。{"旧URL1":"新URL1","旧URL2":"新URL2","旧URL3":"新URL3"}
置換元・置換先のURLまたは文字列はダブルクオーテーション(")で囲み、コロン(:)を新旧ペアの間に入れます。置換ペアを追加する時はカンマ(,)で区切ります。
このスクリプトでは複数のURL形式を認識します。
連想配列に入力された置換元URLがフルパスまたはhttp:/https:の省略形(//example.com/...)の場合、https/http、wwwの有無、http(s):の省略の有無のパターン全てを検索して置換します。
ルートパスや相対パスの場合はそのままを検索して置換します。
URL形式では無い場合もそのままを検索して置換します。
一応HTML・XMLエスケープ機能も付けています。
HTMLまたはMT形式のテキストを対象に置換を行う際は、HTMLエスケープされた文字列を検索する必要があり、置換後の文字列についてもHTMLエスケープされている必要があります。
XMLに関してはBloggerなど一部のブログサービスのインポート・エクスポートファイルがXML形式となっていますので、これらのファイルを対象に置換する場合はHTMLエスケープに加えてXMLエスケープを行う必要があります。
ただHTMLに関してはエスケープ文字の選択肢が複数ありますし、ブログによってはエスケープの必要のない文字までエスケープされていることもあります。それら全てを検索する機能はありません。
HTMLエスケープ機能に関しては、このスクリプトに入力された置換元・置換先文字列について以下のように変換してから置換作業を行います。
& → &
' → '
` → `
" → "
< → <
> → >
つまりHTMLエスケープ機能については不完全です。
URLであればそもそもエスケープする必要のある文字(上記の文字)が入っていないことがほとんどだと思いますし、「&」があってもこのエスケープ機能でほとんど対処できると思います。
URL以外の文字列に関してはこの機能を使うよりも、サイト・ブログのHTMLソースに使われているエスケープ文字を確かめて、自分で文字列をエスケープしておくのが良いです。
XMLについては複数のエスケープ文字の候補は無いと思うので、このスクリプトの機能は使えると思います。
URL用の機能として、連想配列内にはルートパスを入れ、後から、共通部分であるドメイン以上の部分を頭に追加するためのフォームも作りました。
連想配列内のキー(置換元文字列)と値(置換先文字列)に対して、このフォームに入力された文字列を後から追加し、追加された後の文字列に対して各種処理(エスケープ含め)を行います。