プロが教える店舗&オフィスのセキュリティ対策術

チャットのログにある特定の文字にリンクを貼りたいと思っています。

たとえば『マイクロソフト』『アップルコンピュータ』『IBM』というキーワードを前もってデータファイルにURLと共に登録しておいて、ログにそれらのキーワードが出てきたらそれらのサイトへのリンクタグをつけます。

で、以下のようなプログラムで置換を行うと決まって『ー』という文字の含まれるキーワード(たとえばアップルコンピュータ)を置換するときにエラーになります。

\のエスケープ文字をつければいいと言うものでもなく、正規表現の問題というだけでどうすればいいのか全く分かりません。また、他の文字でも起こり得ることなのかも分かっていません。アドバイスよろしくお願いします。

Apacheのエラーログ
[Tue Oct 23 16:16:54 2001] [error] [client 127.0.0.1] Unmatched [ before HERE mark in regex m/アップルコンピュー << HERE タ/ at d:\PROGRA~1\APACHE~1\APACHE\CGI-BIN\CHAT\CHATPOST.CGI line 216.

***置換部分の一行***

$CHAT{Message} =~ s/$FILE{Keyword}/$FILE{Keyword}\<a href="http:\/\/$FILE{Link}" target="_blank"><font size=1>*<\/font><\/a>/g;

A 回答 (2件)

sjis -> euc -> sjis としているわけですね。


確かに大丈夫だとは思います。

wind 系で apache を使用していらっしゃるようですが、エディタで編集するのが便利ということであれば、「秀丸」などのエディタであれば、sjis, euc などを扱えるので特に困ることもないかと。

「便利」というだけで、sjis -> euc -> sjis とすることもないかな?というのが私の考えですが、いかがでしょう。

もし、sjis ということであれば、JPerl を使用したほうがよいのではないでしょうか。
5.005_03 ベースでよいのであれば、バイナリも存在しますし。
私は Unix 系ですが、JPerl を使用して不具合無くサイトを構築した経験もありますし。ただ、jcode.pl の挙動が怪しいという話は聞いたことがあります。

# 最近 perl はご無沙汰なのですが、5.6 からマルチバイト対応になったと
# 聞いています。
# ただ、どの程度対応なのかは確認していませんが。。。
    • good
    • 0
この回答へのお礼

いろいろありがとうございました。

http://homepage1.nifty.com/nomenclator/perl/shif …
を見たところShift_JISは多くの問題を抱えていることが分かりました。
私の知っていた問題点はその一部に過ぎなかったようです。

ほかのスクリプトのデータがかなり膨大なので、
いまさらデータをEUCへ変換することができません。
(サイトはレンタルサーバーを利用していてそこはActivePerlを使って
いるのでJPerlに変更できません。不具合はローカルで実験した時に発生したものです。)

その場しのぎの策でなんとかしたいと思います。
本当にありがとうございました。

お礼日時:2001/10/24 13:14

ひょっとして、データを Sjift_JIS で記述していませんか?


ならば、「ー」だけでなく「表」などもアウトだと思うのですが。(いわゆる、二バイト目があたるという問題です。)

JPerl など、日本語対応の perl 以外なら、EUC で保存するほうがよいかもしれません。

文字化けが心配なら、

Content-type: text/html; charset=EUC-JP

とすれば、「まず」文字化けはしないと思います。

この回答への補足

ありがとうございます。
たしかにShift_JISでデータに記入しています。
たしかに下のような対策を講じるとエラーは起きなくなりました。


Shift_JISだとエディタで編集するのに便利だったので、
他のスクリプトの全てのデータがShift_JISで保存しています。
Shift_JISだとパターンマッチは不可能ということなのでしょうか?
今のところ下の対策で凌いでいますが、
もし対策があれば教えてください。よろしくお願いいたします。

&jcode::sjis2euc(\$FILE{Keyword});
&jcode::sjis2euc(\$CHAT{Message});
$CHAT{Message} =~ s/$FILE{Keyword}/$FILE{Keyword}<a href="http:\/\/$FILE{Link}">*<\/a>/g;
&jcode::euc2sjis(\$CHAT{Message});

補足日時:2001/10/23 23:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!