簡體   English   中英

php郵件html格式鏈接保持無效

[英]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.

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