Php preg_replace()用于转换为URL+;缩短+;从域开始
对不起,我不明白。我想使用preg_替换为以下选项来转换链接文本:Php preg_replace()用于转换为URL+;缩短+;从域开始,php,url,hyperlink,preg-replace,trim,Php,Url,Hyperlink,Preg Replace,Trim,对不起,我不明白。我想使用preg_替换为以下选项来转换链接文本: 文本转换为HTML(包括链接) 将文本修剪到域(无https://或http://或www.) 缩短长URL(例如,缩短到20个标志) 因此,本文: https://stackoverflow.com/questions/ask 应转换为此输出: <a HREF="https://stackoverflow.com/questions/ask">stackoverflow.com/quest...</a>
https://stackoverflow.com/questions/ask
应转换为此输出:
<a HREF="https://stackoverflow.com/questions/ask">stackoverflow.com/quest...</a>
对于问题1,我有一个解决方案:
$linktext = preg_replace("/([\w]+\:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/", "<a href=\"$1\">$1</a>", $linktext);
$linktext=preg\u replace(“/([\w]+\:\/\/\/[\w-?&;\\~=\.\/\@]+[\w\/])/”,“,”,$linktext);
…但不可能将这个变量改为问题2和问题3
有没有办法解决这个问题,用一个替换操作(用数组或其他东西)?我想你可能找不到一个正则表达式来解决这个问题。但是,您可以使用常规PHP,这就是我在回答中要做的
$linktext = 'https://stackoverflow.com/questions/ask';
$linktrimmed = str_replace(['https://', 'http://', 'www.'], '', $linktext); // Remove `https://`, `http://` or `www.`
$linktrimmed = ((strlen($linktrimmed) > 20) ? substr($linktrimmed, 0, 20) . '...' : $linktrimmed); // Shorten to 20 characters and add ellipsis (if neccessary). From https://stackoverflow.com/a/11434149/3088508
$linktext = "<a href=\"$linktext\">$linktrimmed</a>";
echo $linktext;
$linktext='1https://stackoverflow.com/questions/ask';
$linktrimmed=str_replace(['https://'、'http://'、'www.]、'$linktext);///删除`https://`、`http://`或`www`
$linktrimmed=((strlen($linktrimmed)>20)?substr($linktrimmed,0,20)。“…”:$linktrimmed);//缩短到20个字符并添加省略号(如有必要)。从…起https://stackoverflow.com/a/11434149/3088508
$linktext=“”;
echo$linktext;
这将返回:
<a href="https://stackoverflow.com/questions/ask">stackoverflow.com/qu...</a>
基本上它所做的就是:
https://
,http://
或www.
带有空字符串'
…
(从中借用代码)
标记中我想你会找不到一个正则表达式来解决这个问题。但是,您可以使用常规PHP,这就是我在回答中要做的
$linktext = 'https://stackoverflow.com/questions/ask';
$linktrimmed = str_replace(['https://', 'http://', 'www.'], '', $linktext); // Remove `https://`, `http://` or `www.`
$linktrimmed = ((strlen($linktrimmed) > 20) ? substr($linktrimmed, 0, 20) . '...' : $linktrimmed); // Shorten to 20 characters and add ellipsis (if neccessary). From https://stackoverflow.com/a/11434149/3088508
$linktext = "<a href=\"$linktext\">$linktrimmed</a>";
echo $linktext;
$linktext='1https://stackoverflow.com/questions/ask';
$linktrimmed=str_replace(['https://'、'http://'、'www.]、'$linktext);///删除`https://`、`http://`或`www`
$linktrimmed=((strlen($linktrimmed)>20)?substr($linktrimmed,0,20)。“…”:$linktrimmed);//缩短到20个字符并添加省略号(如有必要)。从…起https://stackoverflow.com/a/11434149/3088508
$linktext=“”;
echo$linktext;
这将返回:
<a href="https://stackoverflow.com/questions/ask">stackoverflow.com/qu...</a>
基本上它所做的就是:
https://
,http://
或www.
带有空字符串'
…
(从中借用代码)
标记中首先,创建以下函数:
function string_begins_with($string, $search) {
return (strncmp($string, $search, strlen($search)) == 0) ;
}
然后按如下方式使用此功能:
$linktext = "https://www.stackoverflow.com/questions/ask" ;
$trimmedText = $linktext ;
if (string_begins_with($trimmedText, "https://")) { //Removes https://
$trimmedText = substr($trimmedText, 8) ;
}
if (string_begins_with($trimmedText, "http://")) { //Removes http://
$trimmedText = substr($trimmedText, 7) ;
}
if (string_begins_with($trimmedText, "www.")) { //Removes www.
$trimmedText = substr($trimmedText, 4) ;
}
if (strlen($trimmedText) > 20) { //Trim the text to 20 characters
$trimmedText = substr($trimmedText, 0, 20) . "..." ;
}
echo "<a href='$linktext'>$trimmedText</a>" ;
$linktext=”https://www.stackoverflow.com/questions/ask" ;
$trimmedText=$linktext;
如果(字符串以($trimmedText,“https://”)开头,{//删除https://
$trimmedText=substr($trimmedText,8);
}
如果(字符串以($trimmedText,“http://”)开头){//删除http://
$trimmedText=substr($trimmedText,7);
}
如果(字符串以($trimmedText,“www.”)开头){//删除www。
$trimmedText=substr($trimmedText,4);
}
如果(strlen($trimmedText)>20{//将文本修剪为20个字符
$trimmedText=substr($trimmedText,0,20)。“…”;
}
回声“;
首先,创建以下函数:
function string_begins_with($string, $search) {
return (strncmp($string, $search, strlen($search)) == 0) ;
}
然后按如下方式使用此功能:
$linktext = "https://www.stackoverflow.com/questions/ask" ;
$trimmedText = $linktext ;
if (string_begins_with($trimmedText, "https://")) { //Removes https://
$trimmedText = substr($trimmedText, 8) ;
}
if (string_begins_with($trimmedText, "http://")) { //Removes http://
$trimmedText = substr($trimmedText, 7) ;
}
if (string_begins_with($trimmedText, "www.")) { //Removes www.
$trimmedText = substr($trimmedText, 4) ;
}
if (strlen($trimmedText) > 20) { //Trim the text to 20 characters
$trimmedText = substr($trimmedText, 0, 20) . "..." ;
}
echo "<a href='$linktext'>$trimmedText</a>" ;
$linktext=”https://www.stackoverflow.com/questions/ask" ;
$trimmedText=$linktext;
如果(字符串以($trimmedText,“https://”)开头,{//删除https://
$trimmedText=substr($trimmedText,8);
}
如果(字符串以($trimmedText,“http://”)开头){//删除http://
$trimmedText=substr($trimmedText,7);
}
如果(字符串以($trimmedText,“www.”)开头){//删除www。
$trimmedText=substr($trimmedText,4);
}
如果(strlen($trimmedText)>20{//将文本修剪为20个字符
$trimmedText=substr($trimmedText,0,20)。“…”;
}
回声“;
使用
(如@bassxzero建议的)在评论中
这大大简化了主机名和路径的提取,只需一次substr
操作即可满足您的要求
function getShortUrl($url) {
$cleanedUrl = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
$shortUrl = substr($cleanedUrl, 0, 20);
if ($shortUrl !== $cleanedUrl) {
// it's been truncated, add ellipsis
$shortUrl .= "...";
}
return $shortUrl;
}
$linktext = 'https://example.com/test?abc=123';
echo "<a href='$linktext'>". getShortUrl($linktext) ."</a>";
函数getShortUrl($url){
$cleanedUrl=parse_url($url,PHP_url\u HOST)。parse_url($url,PHP_url\u PATH);
$shortUrl=substr($cleanedUrl,0,20);
如果($shortUrl!=$cleanedUrl){
//已被截断,请添加省略号
$shortUrl.=“…”;
}
返回$shortUrl;
}
$linktext='1!'https://example.com/test?abc=123';
回声“;
使用
(如@bassxzero建议的)在评论中
这大大简化了主机名和路径的提取,只需一次substr
操作即可满足您的要求
function getShortUrl($url) {
$cleanedUrl = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
$shortUrl = substr($cleanedUrl, 0, 20);
if ($shortUrl !== $cleanedUrl) {
// it's been truncated, add ellipsis
$shortUrl .= "...";
}
return $shortUrl;
}
$linktext = 'https://example.com/test?abc=123';
echo "<a href='$linktext'>". getShortUrl($linktext) ."</a>";
函数getShortUrl($url){
$cleanedUrl=parse_url($url,PHP_url\u HOST)。parse_url($url,PHP_url\u PATH);
$shortUrl=substr($cleanedUrl,0,20);
如果($shortUrl!=$cleanedUrl){
//已被截断,请添加省略号
$shortUrl.=“…”;
}
返回$shortUrl;
}
$linktext='1!'https://example.com/test?abc=123';
回声“;
您需要与。基本上,找到匹配项,然后解析url,去掉方案,删除www(如果不是www,我假设您需要保留子域),如果超过20个字符,则减去剩余字符(并添加句点):
您需要与。基本上,找到匹配项,然后解析url,去掉方案,删除www(如果不是www,我假设您需要保留子域),如果超过20个字符,则减去剩余字符(并添加句点):
用解析url
代替正则表达式怎么样。也许这个线程会很有用,(也请注意www
的注释)使用parse_url
而不是regex怎么样。也许这个线程会有用,(也请注意www
)的注释@Sebastian,注意:检查一个