需要一些建议来实现以下方法: 我当前的脚本获取文本,如果它有URL,则替换它们。问题是我想截断URL,因此它们不会破坏表格的宽度或难以看到的换行符以适应它们。
$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
,那么如果找到多个网址,它就无法工作。您可以在替换中使用PHP $1
吗?任何替代方案?
答案 0 :(得分:0)
使用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);
答案 1 :(得分:0)
这种问题也可以在客户端使用css解决(我假设你在谈论你的问题中的html元素table
)。
为此,您必须为单元格指定固定大小,并将display
属性设置为inline-block
。然后,您可以使用white-space
,overflow
和text-overflow
属性定义单词过长时单元格的行为。
示例:
<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>