
お世話になります。
PHP4で作った掲示板を運営しています。
過去ログを参考にし、以下の正規表現で投稿本文中のURLを自動リンクしています。
$text=ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href='\\0'>\\0</a>",$text);
今の問題は、長いURLを貼られたときに折り返しされず掲示板のレイアウトが崩れることです。
そこで<a>~</a>間の表示部分だけ規定文字数で丸めたいのですが、なかなか良い方法が思いつきません。
どなたかお知恵を貸してください。
ちなみに応急処置として、親<td>タグに
style="word-break:break-all;"
を入れています。
でもこれだとIE以外は効果ないので・・・。
No.4ベストアンサー
- 回答日時:
書き忘れていました
for ($j = 0; $j < strlen($matches[0]); $j++)
{
のあとに
80文字で制限をかけるのなら
if ($j >= 80) { break; }
で 文字が80文字で切れると思います。
preg_replace_callback()という関数があったんですね!
手元のリファレンスに載ってなかったので、正規表現でマッチした文字列を個別に抜き出す方法がわからなかったんですよ。
でもこれで解決しました。
教えていただいたコードを元に、こんな感じでやりたかったことを実現しました。
//-----------------------------------------
function MakeURLLink($matches)
{
$TempURLText = $matches[0];
$maxlen = 30;//丸める文字数
if (strlen($matches[0]) > $maxlen){
$TempURLText = substr($matches[0], 0, $maxlen)."...";//$maxlenで文字列を切って「...」をつける
}
return "<a href=".$matches[0].">".$TempURLText."</a>";
}
$URLFilter ="'(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'";
echo preg_replace_callback($URLFilter, "MakeURLLink", $text);
//-----------------------------------------
ereg_replaceで使っていた正規表現をそのまま使うとエラーが出てしまいかなり悩んだんですが、
"(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)"
↓
"'(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'"
のように内側をシングルクォーテーションで括ったら直りました。
おかげで助かりました。
ありがとうございました!
No.3
- 回答日時:
PHP始めたばかりで
正規表現の使い方知らないので
自分でフィルター部分は書き換えてください。
下記で 折り返しできます。
// the callback function
function MakeURLLink($matches)
{
// as usual: $matches[0] is the complete match
// $matches[1] the match for the first subpattern
// enclosed in '(...)' and so on
$TempURLText = "";
for ($j = 0; $j < strlen($matches[0]); $j++)
{
if ($j ==0)
{
$TempURLText = $matches[0][0];
}
else
{
if ($j % 3 !=0) // ここに折り返す数字を入れる
{ $TempURLText .= $matches[0][$j]; }
else
{ $TempURLText = $TempURLText."<br>".$matches[0][$j]; }
}
}
return
"<a href=".$matches[0].">".$TempURLText."</a>";
}
$URLFilter ="|http|";
echo
preg_replace_callback( $URLFilter
, "MakeURLLink", $URL0);
No.2
- 回答日時:
処理は遅くなりますが、
preg_split で一度分解して、
もう一度配列に対して、順に同じ表現で検索して
一致した行で、長さを測り 折り返して置き換えてはどうでしょうか?
No.1
- 回答日時:
こんにちは、
この問題は、結構悩みますよね。
ワードブレイクがかからない文は、
mb_sTrimWidthなんかで強制的に丸めるとか、
場合により、「リンク」などの文字に置き換えて、
title="長いリンク先"という感じで細くしています。
丸める場合も、title入れておくと良いと思います。
全部に入れると、返って見にくくなりますが・・・
まぁ、ステータスバーを見たら解決するもんだいですが、変なリンク先の場合に困りますので・・・
いろいろと対策を考えて、わたくしも苦労しています。
ご存知かもしれませんが、ワードブレイクがかからないのは、リンクだけではないので、テーブルを乱される対処をする場合は、もう少し対策が必要です。
回答ありがとうございます。
やっぱりどなたでも悩むんですね、この問題は。
一応解決できまして、#4さんへのお礼欄にコードを記載させていただきました。
ご参考までにどうぞ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- その他(IT・Webサービス) URLに日本語の文章がはいるものへの対処 貼り付けた時にURLがきれて飛べなくなる 2 2023/05/29 09:31
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP PHPを使って、別サイトの一部を取得して表示したいのです。。 1 2023/01/18 21:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複雑な/による文字列の分割につ...
-
正規表現で自動リンク後、長いU...
-
、"(ダブルクォーテーション)...
-
switchの大量分岐の高速化
-
正規表現 先頭一桁をマッチさせ...
-
半角英数文字を全角英数文字に...
-
VBAのコマンドボタンの文字列の...
-
【PHP】正規表現でHTMLを置換し...
-
日本語(マルチバイト)でのwor...
-
文字列関数について
-
PHPmailerでの添付ファイルの文...
-
ifの中に改行とコメントを書い...
-
パソコンで全角、半角文字の切...
-
【VBA】エクセルで最後の不要な...
-
PHP4→5にアップグレードしたら...
-
phpで送ったメールのヘッダーが...
-
VBのソース検索で、コメントア...
-
正規表現
-
HTML5の「pattern」属性で前後...
-
文字列から、特定の文字を削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで<a>タグ内からURLと文字を...
-
VBAを使ってHTMLソースから特定...
-
preg_matchでエラーが出ます。
-
PHPで変数から1行目だけを取得...
-
、"(ダブルクォーテーション)...
-
正規表現で「0」のみ抽出
-
電話番号のチェック ハイフン...
-
Smartyで部分一致
-
正規表現でシングルクォーテー...
-
正規表現パターンの記入方法に...
-
preg_matchの正規表現で
-
phpでhtmlソースを解析し、文字...
-
PHPで あるフォルダ内の、特定...
-
PHPメールフォーム URLと半角...
-
正規表現 画像リンクのaltの取得
-
phpで文字列に"や'などが含まれ...
-
正規表現で切り出せません。 <...
-
「半角数字」と「+」を許可する...
-
C#でのワイルドカードを使った...
-
正規表現preg_match('#^(?:[a-z
おすすめ情報