簡體   English   中英

substr方法不適用於php中的strpos

[英]substr method doesnt work with strpos in php

我必須制作一個php文檔,該文檔將電子郵件地址分開。 例如,當您有sample@gmail.com時,應顯示:

局部:樣本

主持人:gmail

頂級域名:com

當我運行此代碼時,第二條語句不能很好地工作。 我得到的不是“ gmail”,而是“ gmail.com”

<?php $str=$_GET["email"];
echo "local-part: ".substr($str,0,strpos($str,"@"))."<br>";
echo "host: ".substr($str,strpos($str,"@")+1,strpos($str,"."))."<br>";
echo "top-level domain: ".substr($str,strpos($str,".")+1,strlen($str)); ?>
<form method="GET" action="index.php">
<input id="mail" type="text" size="20" name="email">
<input type=submit value="submit" name="submit">
</form>

我認為使用explode()更容易和更簡單。 @上拆分第一個字符串,然后在上拆分該字符串的右側.

$str = 'sample@gmail.com';
[$localPart, $domain] = explode('@', $str);
[$host, $tld] = explode('.', $domain);

echo "Local part: $localPart\n";
echo "Host: $host\n";
echo "TLD: $tld\n";

輸出:

Local part: sample
Host: gmail
TLD: com

請注意,這僅在您的域為兩個級別時有效。 如果您想處理foo.gmail.com類的foo.gmail.com那么您將需要更多:

[$localPart, $domain] = explode('@', $str);
$host = substr($domain, 0, strrpos($domain, '.'));
$tld = substr($domain, strrpos($domain, '.') + 1);

輸出:

Local part: sample
Host: foo.gmail
TLD: com

注意strpos()從左到右查找第一個匹配項, strrpos()從右到左strrpos() 您希望后者找到TLD。

另一個例子:

[$localPart, $domain] = explode('@', $str);
$parts = explode('.', $domain);
$tld = array_pop($parts); // pop off the last thing in the list
$host = implode('.', $parts); // re-join the remaining items

亞歷克斯的答案解釋了一種更好的方法,但是要回答您的直接問題,即為什么用主機獲取“ .com”,原因是substr()函數接受長度作為其第三個參數,而不是比在字符串中停止的位置。

如果您運行:

echo strpos($str,".");

這將輸出13號所以你SUBSTR試圖抓住后面的 “@”,而不是抓住高達字符串中的第13個字符的13個字符。

嘗試解析電子郵件時要小心。 有很多陷阱和模糊的規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM