- ベストアンサー
文字列の抽出について
こんにちは。お世話になっております。 DBに登録のあるデータを呼び出した際、長文データは切り捨てて表示したく、mb_strimwidth関数を使っているのですが、そのデータの中には、[a:1]といったような文字列を含んでおり、データを出力する際、ereg_replace関数を用い、 [a: の部分を<img src=\"../images/"; ] の部分を.gif\"> などといった流れで、[a:1]から画像を呼び出すようしているのですが、冒頭にご説明したように、mb_strimwidth関数を用いるので、呼び出される[a:1]の文字列が分割されることもあり(変換しきれない)、結果的に<img src="../images/ で止まってしまうことになり、>で閉じることが出来ずに、他のHTMLソースに影響し、レイアウトがズレテしまう状況になってしまいます。 少し判り難い説明かもしれませんが、以上のような流れを考えた場合、その対策や、他にいいやり方などあるのか、アドバイスいただければと投函させていただきました。 自分でも色々考え試行錯誤をしていますが、非効率であったり、結局のところ上手くいかなかった利としている状況です・・。 お忙しい中恐縮ですが、ヒントなど何でも結構です。アドバイスをいただければ幸いです。以上宜しくお願いいたします。(当方PHP5を利用)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
正規表現で変換してみては? 途中で切れる場合は変換されないので <? $str1="test[a:1]test[a:2]test"; $str2=preg_replace("/\[a:(.*?)\]/mis",'<img src="../images/\1.gif">',$str1); print $str2; $str3="test[a:1]test[a:"; $str4=preg_replace("/\[a:(.*?)\]/mis",'<img src="../images/\1.gif">',$str3); print $str4; ?> 切れた場合に[aをどうしたのかにもよりますのね・・・ 結局は[aと表示されてしまうのでかっこつかないし
その他の回答 (1)
- calltella
- ベストアンサー率49% (317/635)
わかりにくいので解釈を書きます。 つまりこの様な文字列を↓ 文字列:あいう[a:]えおかきくけこ 変換後:あいう<img src=\"../images/"hoge.gif\">えおかき... ↑こうしたいと言う事でいいんでしょうか? それで時々 文字列:さしすせそ[a:]たち 変換後:さしすせそ<img src=\"../images/"hoge... ↑こうなってしまうと 解決案として 文字列:さしすせそ[a:]たち 1.split関数で「さしすせそ」と「たち」に切り分ける。 2.後半の「たち」だけにmb_strimwidth関数を適用し 3.[a:]を変換する。 4.1.2.3を結合して表示。
お礼
calltella様 はじめまして、こんばんは。早速のアドバイスをありがとう御座います! 説明が上手くなくて申し訳ありません。 calltella様が仰るように確かにそのような形なのですが、 あいう[a:1]えおかきくけこ[a:2]さしす[a:3]せそ と、a: のあと違う番号のものがいくつもあり、split関数で切り分けるにしても、その番号の種類の数だけ切り分ける?などと、スキルの無い私には、split関数を使っての効率の良いスクリプトが描けませんでした。(実はこの関数、初めて使い方を知りました。汗) 今回、#2の方のスクリプトで解決できましたが、以上は決して文句ではなく、報告を兼ねてのご連絡です。今回の解決(実装)には直接的に結びつけることは出来ませんでしたが、考え方など貴重なアドバイスを頂戴出来たと感謝しております。有難う御座いました。
お礼
yambejp様 こんばんは、いつもお世話になっております。早速のアドバイスを有難う御座います! >結局は[aと表示されてしまうのでかっこつかないし いや、、実は今日一日中考えていたので、仮に最後に[a:と出たとしても、もの凄い進歩です!(私が進歩というのではなく、表示結果という意味です。汗) 正規表現って使い方次第なのですね。有難う御座いました!