:::

14-3 個資保護

  1. 其實這個系統沒有個資問題
  2. 不過,在這個不理性的時代,還是得做做樣子來杜攸攸之口。
  3. 本系統要處理的大概就是已報名名單的部份。
  4. 名字若是三個字的,中間用O來取代,Email部份,僅留 @ 左邊帳號部份。

一、修改 list_signup() 函數

  1. 我們的名單是在 index.php 中的 list_signup() 函數中產生的,所以,從源頭動手腳(從樣板其實也可以,但麻煩了些)。
    //已報名名單
    function list_signup($action_id)
    {
        global $db, $smarty;
    
        $sql = "SELECT a.*, b.* FROM `signups` AS a
        JOIN `users` as b ON a.`uid` = b.`uid`
        WHERE a.`action_id` = '{$action_id}'";
        if (!$result = $db->query($sql)) {
            throw new Exception($db->error);
        }
        $signups = [];
        while ($signup = $result->fetch_assoc()) {
            if (!isset($_SESSION['group']) or $_SESSION['group'] != 'admin') {
                //姓名中字取代
                $len = strlen($signup['name']);
                if ($len > 6) {
                    $target         = substr($signup['name'], 3, 3);
                    $signup['name'] = str_replace($target, '○', $signup['name']);
                }
                //email取代
                preg_match("/(.+?)\@(.+?)\.(.+?)$/", $signup['email'], $em);
                $signup['email'] = "{$em[1]}@" . str_repeat("x", strlen($em[2])) . ".{$em[3]}";
            }
            $signups[] = $signup;
        }
        $smarty->assign('signups', $signups);
    }

二、中文字的取代

  1. 先看姓名部份,首先,要兩個字以上才處理,故用 strlen('文字') 來抓姓名長度,一個 UTF-8 中文字是 3 byte,所以,只要超過 6,就代表姓名是三個字以上。
  2. substr('文字', 起始位置, 長度) 是用來抓取部份字串的,第二個參數是抓取的起始位置,第一個中文字位置是 0~2,第二個字就是從 3~5。故起始位置設為 3,第三個參數則是抓取長度,剛剛說了,一個中文字 3 byte,所以,設成 3 代表抓一個中文字。如此設定下來,就是抓出第二個字的意思,以「吳弘凱」來說,抓出來的就是「弘」。
  3. str_replace('搜尋', '取代', '文字') 則是用來取代字串的,我們把找到的第二個中文字,用個其他符號取代之。

三、Email的取代

  1. preg_match('/正規表達式/', '文字' , $結果) 這個用法就比較高深一點,首先您要給它一個正規表達式,然後,該函數會去搜尋第二個參數中,符合這個正規表達式的內容有哪幾個,然後依序存入「結果」中。
  2. $結果[0]是原字串,$結果[1]則是第一個符合正規表達式的字串,依此類推。
    • . 表示任意字元(不包括換行符號)
    • + 修飾前面一個字元,限定數量是一個或者多個,但預設會儘可能匹配更長的字符串(貪婪匹配)
    • + 後面再來個 ? 就表示用非貪婪匹配。舉個例子:假設字串 「*abc*abc*」, 如果有 ?,那麼匹配到的就是 *abc*,如果沒有,匹配到的就是整個字串,因為 . 也可以匹配到 *.
  3. 至於完整正規表達式...就留給外星人去解讀吧。
  4. str_repeat('字串', 次數) 是用來重複字串的用,我們把@右邊的網域,例如 gmail 取代成 xxxxx 這個樣子。

 


:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D752

計數器

今天: 3755375537553755
昨天: 3438343834383438
總計: 7394084739408473940847394084739408473940847394084