1

たくさんのテキストを調べて、テキスト形式のURLを探し、それらをhtmlaに変換する小さな関数があります。

例えば

normal text lipsum etc http://www.somewebsitelink.com lipsum lipsum

になります:

normal text lipsum etc <a href="www.somewebsitelink.com">http://www.somewebsitelink.com</a> lipsum lipsum

私の機能は次のとおりです。

function linkify($text)
{
  $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'<a target="_blank" href="\\1">\\1</a>', $text);

  $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'\\1<a target="_blank" href="http://\\2">\\2</a>', $text);

  return $text;
}

これはすべて問題なく動作しますが、この関数を使用してhtmlを印刷すると、限られた幅のスペースにあり、リンクがスペースに収まらないほど大きくなり、オーバーフローが発生することがあります。

私は2つのことをどうやってやるのだろうかと思っています:

a。テキストから不要なものを削除します。つまり、「http://」で終わります。

<a href="http://www.somewebsitelink.com">www.somewebsitelink.com</a>

b。テキストが20文字を超える場合は、その後のすべてを切り取り、いくつかのドットを挿入します。例えば:

<a href="http://www.somewebsitelink.com">www.somewebsitelin...</a>

正規表現を使用せずにこれを実行する必要があるのではないかと思いますが、正規表現についての私の理解はかなり限られています。

4

3 に答える 3

2
$link = 'http://www.somewebsitelink.com';
function linkify($text, $maxLen = 15)
{
  return preg_replace_callback('(((f|ht){1}tp://)([-a-zA-Z0-9@:%_\+.~#?&//=]+))', function($t) use ($maxLen) {
      if ( strlen($t[3]) > $maxLen)
        $t[3] = substr_replace($t[3], '...', $maxLen);

      return sprintf('<a target="_blank" href="%s">%s</a>', $t[0], $t[3]);
  }, $text);
}

header('content-type: text/plain');
echo linkify($link);

PHP <= 5.2 のコード

$link = 'http://www.somewebsitelink.com';
function linkify($text, $maxLen = 15)
{
    $funcBody = <<<FUNC
if ( strlen(\$t[3]) > \$maxLen)
  \$t[3] = substr_replace(\$t[3], '...', \$maxLen);   

return sprintf('<a target="_blank" href="%s">%s</a>', \$t[0], \$t[3]);   
FUNC;
      $func = create_function(
        '$t, $maxLen =' . $maxLen,
        $funcBody
    );
    return preg_replace_callback('(((f|ht){1}tp://)([-a-zA-Z0-9@:%_\+.~#?&//=]+))', $func, $text);
}

header('content-type: text/plain');
echo linkify($link);

結果は

<a target="_blank" href="http://www.somewebsitelink.com">www.somewebsite...</a>
于 2012-11-02T12:23:44.700 に答える
0

php substr 関数を使用します。例えば:

<?php substr($text,0,10);?>
于 2012-11-02T12:10:11.337 に答える