チャットのログにある特定の文字にリンクを貼りたいと思っています。
たとえば『マイクロソフト』『アップルコンピュータ』『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;
No.2ベストアンサー
- 回答日時:
sjis -> euc -> sjis としているわけですね。
確かに大丈夫だとは思います。
wind 系で apache を使用していらっしゃるようですが、エディタで編集するのが便利ということであれば、「秀丸」などのエディタであれば、sjis, euc などを扱えるので特に困ることもないかと。
「便利」というだけで、sjis -> euc -> sjis とすることもないかな?というのが私の考えですが、いかがでしょう。
もし、sjis ということであれば、JPerl を使用したほうがよいのではないでしょうか。
5.005_03 ベースでよいのであれば、バイナリも存在しますし。
私は Unix 系ですが、JPerl を使用して不具合無くサイトを構築した経験もありますし。ただ、jcode.pl の挙動が怪しいという話は聞いたことがあります。
# 最近 perl はご無沙汰なのですが、5.6 からマルチバイト対応になったと
# 聞いています。
# ただ、どの程度対応なのかは確認していませんが。。。
いろいろありがとうございました。
http://homepage1.nifty.com/nomenclator/perl/shif …
を見たところShift_JISは多くの問題を抱えていることが分かりました。
私の知っていた問題点はその一部に過ぎなかったようです。
ほかのスクリプトのデータがかなり膨大なので、
いまさらデータをEUCへ変換することができません。
(サイトはレンタルサーバーを利用していてそこはActivePerlを使って
いるのでJPerlに変更できません。不具合はローカルで実験した時に発生したものです。)
その場しのぎの策でなんとかしたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
ひょっとして、データを 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});
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- C言語・C++・C# 必ずyou bet と表示されます 2 2023/07/28 22:19
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
各項目がダブルクォーテーショ...
-
csvデータのダブルクォーテーシ...
-
正規表現で、特定の文字列を含...
-
VBA 置換文字がみつからない時
-
csvデータ ダブルクォーテ...
-
Excel VBA 教えてください。 VB...
-
ハングルを日本語に置換
-
C言語の質問です、プログラミン...
-
ダブルコーテーション 、"を二...
-
バッチファイルの処理が実際の...
-
スペースで区切られた氏名から...
-
Perl での XML 置換について
-
Excel・ユーザーフォームの情報...
-
文字AAとBBではさまれた不特定...
-
複数のパワーポイントファイル...
-
正規表現 特定の文字列を含む行...
-
パワーポイントの一括置換:複...
-
【Excel VBA】文字列の置換作業...
-
テキストボックスの文字列を置...
-
C言語でテキストファイルの内容...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
csvデータのダブルクォーテーシ...
-
VBA 置換文字がみつからない時
-
csvデータ ダブルクォーテ...
-
各項目がダブルクォーテーショ...
-
正規表現で、特定の文字列を含...
-
スペースで区切られた氏名から...
-
xmlファイル内の文字列置換
-
正規表現 特定の文字列を含む行...
-
○文字目に文字挿入
-
PowerShellでテキストの空白行...
-
EXCEL警告「置換対象のデータが...
-
ハングルを日本語に置換
-
C#で空白行を削除する方法
-
python 大文字小文字を区別しな...
-
EXCELマクロを用いてグラフの系...
-
EXCEL VBA でCTRL+Fのダイア...
-
テキストファイル中の文字列の置換
-
word オートシェイプ内も一括変換
-
Excel・ユーザーフォームの情報...
-
テキストボックスの文字列を置...
おすすめ情報