PHP truncate preg_replace URL



需要一些建议来实现以下方法:我当前的脚本获取文本,如果它具有URL,则可以替代它们。问题是我要截断URL(S(,以便它们不会打破表格或难看的线路的宽度以适合它们。

$text = file_get_contents("temp.txt");
$link = preg_replace('@(https?://([-w.]+)+(:d+)?(/([-w/_.]*(?S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $text);
echo $link;

我担心,如果我substr() $link,那么如果找到多个URL,它将无法工作。您可以在更换中php php $1吗?有其他选择吗?

使用 preg_replace_callback修改匹配项和替换。这将返回前10个字符的例子:

$link = preg_replace_callback('@(https?://([-w.]+)+(:d+)?(/([-w/_.]*(?S+)?)?)?)@',
             function($m) {
                 return '<a href="'.$m[1].'" target="_blank">'.substr($m[1], 0, 10).'</a>';
             },
             $text);

也可以使用CSS在客户端解决此类问题(我假设您在问题中正在谈论HTML元素table(。

要这样做,您必须给您的单元格一个固定的尺寸,并将display属性设置为inline-block。然后,当使用 white-spaceoverflowtext-overflow properties单词太长时,您可以定义单元格的行为。

示例:

<html>
    <head>
        <style>
.mytable td:nth-child(2) {
    display: inline-block;
    width: 200px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
        </style>
    </head>
    <body>
        <table class="mytable">
            <tr><td>abcd</td><td>www.smallurl.jp</td><td>efgh</td></tr>
            <tr><td>ijkl</td><td>www.a-giant.url/larger/than/the/cell/width</td><td>mnop</td></tr>
        </table>
    </body>
</html>

相关内容

  • 没有找到相关文章

最新更新