去年の11月コード番号No.699161で一度お尋ねしたのですが、行き詰まったまま今も困っていますので、お願いします。
検索の結果見つかった文字列を赤で表示させたいのです。
$yakugo = 'adj. [次の成句で] \njm. seine Geliebte abspenstig machen 或人の恋人を取る; \neinem Geschaeft die Kunden abspenstig machen 或る店のお客を横取りする';
上記のような文字列$yakugoをテキストエリアに表示する際に、改行マークでは改行させ、 恋人'という文字列があればそれを赤で表示するようにしたいので、次のような表記表現で置換しました:
$yakugo=~ s/\\n/\n/g;
$color ="red";
$yakugo =~ s/<[^>]*(>|$)//g;
$tmp = '恋人';
$tmp =~ s/([\+\*\.\?\^\$\[\-\]\|\(\)\\])/\\$1/g;
$yakugo =~ s/($tmp)/<B style="color:red">$1<\/B>/ig;
$yakugoを下のテキストエリアに書き込みますと
<TEXTAREA style="background-color:#F1E3FF; font-size:18; border:5px double #008040;font-family: 'MS P明朝', serif;" name="DATA" rows="10" cols="50" >$yakugo</TEXTAREA>
adj. [次の成句で]
jm. seine Geliebte abspenstig machen 或人の<B style="color:red">恋人</B>を取る;
einem Geschaeft die Kunden abspenstig machen 或る店のお客を横取りする
と表示され、改行はできているのですが、色を付けるタグがそのまま出てしまって、色が付きません。
また次の検索結果を表示させるとすべて文字化けになり:
<B style="color:red"></B>+<B style="color:red"></B>[<B style="color:red"></B>a<B
[略]
のようになってしまいます。
この例では検索文字列が1回しか見つかりませんが、これが複数回の場合でも色が付くようにしたいと思います。どうぞよろしく御教示下さい。
No.1ベストアンサー
- 回答日時:
問題を切り分けましょう。
タグがそのまま表示されるのは、TEXTAREAを使用しているせいです。
代替案として、DIVを使用する方法があります。(改行を<BR>とする必要があります。)
百聞は一見にしかず。
以下のタグをHTML文書に貼り付けてみてください。
-------------------------------------------------
<TEXTAREA style="background-color:#F1E3FF; font-size:18; border:5px double #008040;font-family: 'MS P明朝', serif;" name="DATA" rows="10" cols="50" >adj. [次の成句で]
jm. seine Geliebte abspenstig machen 或人の<B style="color:red">恋人</B>を取る;
einem Geschaeft die Kunden abspenstig machen 或る店のお客を横取りする</TEXTAREA>
<DIV style="background-color:#F1E3FF; font-size:18; border:5px double #008040;font-family: 'MS P明朝', serif; width:375px; height:200px; overflow:auto;" name="DATA">adj. [次の成句で] <BR>
jm. seine Geliebte abspenstig machen 或人の<B style="color:red">恋人</B>を取る; <BR>
einem Geschaeft die Kunden abspenstig machen 或る店のお客を横取りする</DIV>
-------------------------------------------------
文字化けの件は状況がよく分かりません。
「次の検索結果を表示」させるためのロジックはどうなっているのでしょうか。
特に、変数 $yakugo の初期化が気になるところです。
$yakugoの値に注目して見直してみてください。
ありがとうございました。<DIV>...</DIV>で試して成功しました。ただし、やはり、次の$yakugoからは日本語がすべて文字化けします。ご注意を頂いた$yakugo の初期化の点ですが、単語検索のヒットデータはまずすべてファイルに書き込んでおいて、表示にはこのファイルを開いては一行ずつ読んで$yakugoに代入して表示、とやっています。ファイルのなかを調べましたが、検索結果がきれいに並んでいます。日本語文字化けを起こす原因は、やはりタグを取り除いてしまうという置換方法にあるのでしょうか?
No.3
- 回答日時:
文字化けの件についてですが、
詳細がわからないとコメントできないと思います。
実際にどのようなソースになっているのでしょう?
いずれにせよ、
no.1の方がおっしゃられていますとおり、
問題の切り分けをしていくべきです。
>日本語文字化けを起こす原因は、
>やはりタグを取り除いてしまうという置換方法にあるのでしょうか?
そのタグ除去部分のコードをのぞいて実行してみてください。
それで、その部分に原因があったのかがわかるはずです。
その他、
'adj. [次の成句で] 中略 お客を横取りする'
というような長い(複雑な?)データ以外にでも、
文字化けが発生するのか等調べてみるべきでしょう。
No.2
- 回答日時:
$yakugoは問題なさそうですね。
念のため$yakugo以外の変数も一度見直してください。
下記の単純なスクリプトで試してみましたが、文字化けは再現しませんでした。
# sample.pl
@yakugo = (
'[シモンズ]恋人もいないのに\n[ベッツィ&クリス]白い色は恋人の色',
'[五輪真弓]恋人よ\n[柏原芳恵]恋人たちのキャフェテラス',
'[中村雅俊]<i>恋人</i>も濡れる街角\n[松任谷由実]恋人が<u>サンタクロース</u>',
'[アリス]<font size=1>走っておいで恋人よ</font>\n[桑田佳祐]<b>白い</b>恋人達\n[うしろ髪ひかれ隊]メビウスの恋人'
);
foreach(@yakugo) {
$yakugo = $_; # $yakugo初期化
$yakugo=~ s/\\n/\n/g;
$yakugo =~ s/<[^>]*(>|$)//g;
$tmp = '恋人'; # $tmp初期化
$tmp =~ s/([\+\*\.\?\^\$\[\-\]\|\(\)\\])/\\$1/g;
$yakugo =~ s/($tmp)/<B style="color:red">$1<\/B>/ig;
print $yakugo,"\n";
}
# end of sample.pl
ありがとうございました。ご返事が送れて済ません。先ほどやっと成功しました。
文字化けの原因が分かりました。それは、$tmp の初期化がうまくいっていなかったためでした。ほかの箇所に原因があったのにここにばかり目を向けすぎていて、お恥ずかしい次第です。それにもかかわらず,親切にご指示を頂きありがとうございました。
これでさらに先へ進むことができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- HTML・CSS HTMLで特定の文字だけ色を変えたいのですが、指定した色と違う色が反映してしまいます。 下記、「前」 5 2023/06/27 12:08
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- HTML・CSS スマホ表示用のwebページ、style.cssでは表の中の文字 font-size は指定できない? 1 2023/03/27 18:57
- その他(IT・Webサービス) cssの@mediaについて 1 2023/05/14 07:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptで任意の文字の色を...
-
リンクの下線の距離を変更した...
-
<form <input type="text"の枠...
-
CSSでクラスのエイリアス(include)
-
点線や破線を引くには
-
HRタグ 枠線を透明にするには?
-
<pre>~</pre>について
-
htmlの文字が縦書きになる
-
CSSのホバーエフェクト
-
複数のボタンを等間隔に、かつ...
-
2個のFormを横並びにしたい
-
メールアドレス(グループ)の...
-
htmlのolやulなどlistにtitleや...
-
【ヒトの神秘】美男美女から何...
-
html の divとtable の役割
-
<ul><li></li></ul>にするメリ...
-
HTML属性での「""」 「''」違い
-
含む含まないという概念自体の...
-
ページを開いているときのリン...
-
smallにtext-allignが効かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<pre>~</pre>について
-
HRタグ 枠線を透明にするには?
-
訪問済のリンク色を変えない方法
-
カラープレーンってなんですか?
-
JavaScriptで任意の文字の色を...
-
<form <input type="text"の枠...
-
CSSでクラスのエイリアス(include)
-
リンク部分にカーソルが来たら...
-
横スクロールバーを表示したい
-
マウスオーバーでの反応速度が遅い
-
CSSのtext-decoration: none;が...
-
smartyテンプレートの<style></...
-
H2タグを使ったときの文字の背...
-
テキストエリア送信の際の文字...
-
リンクの文字と下線の間にスペ...
-
C# RichTextBoxで選択した文字...
-
リンク下のアンダーラインの消し方
-
リンクの下線の距離を変更した...
-
スクロールバーが薄いです。
-
点線や破線を引くには
おすすめ情報