需要一些建议来实现以下方法:我当前的脚本获取文本,如果它具有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-space
, overflow
和 text-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>