PHP 截断 preg_replace URL
PHP truncate preg_replace URL
需要一些方法建议来实现以下目标:
我当前的脚本获取文本,如果它有 URL(s) 则它会替换它们。问题是我想截断 URLS(s),这样它们就不会打破 table 的宽度或难看的换行符以适合它们。
$text = file_get_contents("temp.txt");
$link = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)?)@', '<a href="" target="_blank"></a>', $text);
echo $link;
我担心如果我 substr()
$link
然后如果找到多个 URL 则它不会工作。你能把PHP中的
替换掉吗?还有其他选择吗?
使用preg_replace_callback
修改匹配和替换。这returns前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
属性定义当单词太长时单元格的行为。
示例:
<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>
需要一些方法建议来实现以下目标: 我当前的脚本获取文本,如果它有 URL(s) 则它会替换它们。问题是我想截断 URLS(s),这样它们就不会打破 table 的宽度或难看的换行符以适合它们。
$text = file_get_contents("temp.txt");
$link = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)?)@', '<a href="" target="_blank"></a>', $text);
echo $link;
我担心如果我 substr()
$link
然后如果找到多个 URL 则它不会工作。你能把PHP中的替换掉吗?还有其他选择吗?
使用preg_replace_callback
修改匹配和替换。这returns前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
属性定义当单词太长时单元格的行为。
示例:
<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>