[英]php mail html format link remains inactive
我想在php中創建一個郵件功能,以允許訪問者創建和激活用戶帳戶。 為此,我發了一封帶有鏈接的郵件,該鏈接指向激活該帳戶的頁面。 現在的問題是,有些人想要使用會干擾電子郵件中代碼的字符。 例如:“”和“”。 我試圖轉義這些字符,但是當出現此類字符時,鏈接變為無效。 郵件已發送,但是鏈接不可單擊。
這就是代碼的樣子。
變量在PHP中設置
$New_user->Username = $db->real_escape_string($_POST['un']);
$RawUn = $_POST['un'];
$New_user->Password = $_POST['pw'];
$New_user->Email = $_POST['em'];
$CheckEmail = explode("@", $New_user->Email);
$New_user->Country = $_POST['cn'];
$New_user->City = $_POST['ct'];
//$NEW_USER IS AN OBJECT CREATED TO HOLD ACCOUNT INFORMATION SUCH AS USERNAME AND EMAIL
//$RAWUN IS A VARIABLE TO HAVE AN UNESCAPED VALUE OF THE USERNAME TO INSERT IN THE INPUT FIELD IF SOMETHING WENT WRONG
檢查值之后,將發送郵件:
$message = array(
'Hello ' . $New_user->Username . ',<br/>',
'<br/>',
'Welcome to MakeAMemo.<br/>',
'To start working with your account you will have to activate it.<br/>',
'Just click on the <a href="localhost/makeamemo.com/ConfirmAccount.php?Un=' . str_replace(" ", "+", $New_user->Username) . '&Em=' . $db->real_escape_string($New_user->Email) . '&Action=Create">link</a> and you are ready to go.<br/>',
'Log in and check if it works. If not, please contact us(E-mail is on the website).<br/>',
'Your password: ' . $New_user->Password . '<br/>',
'<br/>',
'Kind regards,<br/>',
'<br/>',
'Administration');
$header = array(
'From: makeamemoofficial@gmail.com',
'Reply-To: makeamemoofficial@gmail.com',
'Content-type: text/html');
mail($New_user->Email,"MakeAMemo => New account",implode("\r\n", $message),implode("\r\n", $header));
我已經建立了與數據庫的連接,因此使用$ db-> real_escape_string進行轉義可以正常工作。 網站建成后,鏈接的位置將更改。 我檢查了代碼是否在href中沒有str_replace的情況下工作。 沒有成功。 我也沒有嘗試不逃避用戶名的成功。 標簽在郵件中不可見,因此可以識別。 鏈接未被阻止,因為當我不使用特殊字符時它可以正常工作。 將雙引號更改為單引號時,您會反轉效果,這意味着代替“”,“”無效。 我認為標題與它無關,因為使用普通字符時鏈接確實起作用。
你知道我的問題是什么原因嗎? 每個答案表示贊賞。
adear11:這是生成的標記:
<a href="localhost/makeamemo.com/ConfirmAccount.php?Un=%22s+avonds&Em=dennis.heutinck%40gmail.com&Action=Create">link</a>
“ s avonds是不正確的荷蘭語單詞,其中包含一些需要測試的字符。
而不是在電子郵件中使用str_replace
,您應該使用urlencode
http://php.net/urlencode
此函數專門用於編碼在URL中使用的字符串
至於鏈接在正確形成時並不總是有效,可能是用戶未使用HTML電子郵件。
另外,盡管該腳本不是特定於您的問題的,但它是瘋狂的不安全的。 您永遠不需要使用用戶提供的輸入(在您的情況下$_POST
),而無需先清除輸入。 至少,所有這些分配都需要通過htmlspecialchars
運行。
更新資料
考慮到您遇到的麻煩,我將考慮不在URL中傳遞實際數據。 相反,我會將數據保存到數據庫,然后生成一個令牌放入URL。 如果使用uniqid
生成令牌,那么這些特殊字符將不會有任何麻煩,因為字符串將是字母數字。 用戶單擊鏈接后,只需獲取與令牌關聯的數據,然后繼續進行操作即可(如果數據在URL中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.