Ngu ngơ học làm web (70) - Bài tập về thời gian 2

Tiếp theo của: Ngu ngơ học làm web (69) - Bài tập về thời gian 1
------

Phần 70. Bài tập về thời gian 2


Đây là clip số 60:


So sánh hai ngày bất kì. Ý tưởng là, cho người dùng nhập vào hai ngày, sau đó đổi hai ngày này sang dạng timestamp, thực hiện so sánh hai giá trị timestamp.

Đây là đoạn mã,

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Thời gian</title>
  <link rel="stylesheet" href="jquery-ui-1.12.1.custom/jquery-ui.css">
  <script src="jquery-ui-1.12.1.custom/external/jquery/jquery.js"></script>
  <script src="jquery-ui-1.12.1.custom/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#date-start" ).datepicker({ dateFormat: "dd/mm/yy" });
    $( "#date-end" ).datepicker({ dateFormat: "dd/mm/yy" });
  } );
  </script>
</head>
<body>
<?php
  $dateStart = (isset($_POST['date-start'])) ? $_POST['date-start'] : '';
  $dateEnd = (isset($_POST['date-end'])) ? $_POST['date-end'] : '';
?>
  <form action="#" method="post" id="mainForm" name="mainForm">
    <p>Start: <input readonly="readonly" type="text" name="date-start" id="date-start" value="<?php echo $dateStart; ?>"></p>
    <p>End: <input readonly="readonly" type="text" name="date-end" id="date-end" value="<?php echo $dateEnd; ?>"></p>
    <input type="submit" value="Submit">   
  </form>
<?php
  function compareDates($dateStart, $dateEnd) {
    $arrDateStart = date_parse_from_format('d/m/Y',  $dateStart);
    $tsStart = mktime(0, 0, 0, $arrDateStart['month'], $arrDateStart['day'], $arrDateStart['year']);

    $arrDateEnd = date_parse_from_format('d/m/Y',  $dateEnd);
    $tsEnd = mktime(0, 0, 0, $arrDateEnd['month'], $arrDateEnd['day'], $arrDateEnd['year']);
   
    $result = 0;
    if($tsEnd > $tsStart) {
      $result = 1;
    }else if ($tsEnd < $tsStart){
      $result = -1;
    }

    return $result;
  }

  if($dateStart != null && $dateEnd != null) {
    if(compareDates($dateStart, $dateEnd) == 0) {
      echo 'Start = End';
    }else if(compareDates($dateStart, $dateEnd) == 1) {
      echo 'Start < End';
    }else {
      echo 'Start > End';
    }
  }
?>

Đây là clip số 61:


Bài tập: cộng thêm giá trị cho thời gian. Ý tưởng là, cho người dùng nhập vào một giá trị ngày tháng năm bất kì, sau đó cho người dùng nhập một số bất kì và chọn đối tượng sẽ được cộng là ngày, tháng hay năm, cuối cùng thực hiện phép cộng và cập nhật lại giá trị ngày tháng năm.

Đây là đoạn mã,

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Thời gian</title>
  <link rel="stylesheet" href="jquery-ui-1.12.1.custom/jquery-ui.css">
  <script src="jquery-ui-1.12.1.custom/external/jquery/jquery.js"></script>
  <script src="jquery-ui-1.12.1.custom/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#date" ).datepicker({ dateFormat: "dd/mm/yy" });
  } );
  </script>
</head>
<body>
<?php
    function createSelectbox($name, $attributes, $array, $keySelect) {
      $xhtml = '';

      if(!empty($array)) {
        $xhtml .= '<select name="'.$name.'" id="'.$name.'" style="'.$attributes.'">';
        foreach ($array as $key => $value) {
          if($key == $keySelect) {
            $xhtml .= '<option value="'.$key.'"selected = "selected">'.$value.'</option>'; 
          } else {
            $xhtml .= '<option value="'.$key.'">'.$value.'</option>';
          }
        }
        $xhtml .= '</select>';
      }
      return $xhtml;
     }
    function addTime($date, $format, $type, $value) {
      $arrDate = date_parse_from_format($format, $date);
      switch ($type) {
        case 'Day':
          $ts = mktime(0, 0, 0, $arrDate['month'], $arrDate['day'] + $value, $arrDate['year']);
          break;
        case 'Month':
          $ts = mktime(0, 0, 0, $arrDate['month'] + $value, $arrDate['day'], $arrDate['year']);
          break;
        case 'Year':
        $ts = mktime(0, 0, 0, $arrDate['month'], $arrDate['day'], $arrDate['year'] + $value);
          break;
      }
      $result = date($format, $ts);
      return $result;
    }
    $arrTypes = array('---select type---', 'Day', 'Month', 'Year');
 
    $date     = (isset($_POST['date'])) ? $_POST['date'] : '';
    $type     = (isset($_POST['select-type'])) ? $_POST['select-type'] : '';
    $value    = (isset($_POST['value'])) ? $_POST['value'] : '';

    $strTypes = createSelectbox('select-type', 'width: 150px', $arrTypes, $type);
    $result = addTime($date, 'd/m/Y', $arrTypes[$type], $value);
  
?>
  <form action="#" method="post" id="mainForm" name="mainForm">
    <p>Date: <input readonly="readonly" type="text" name="date" id="date" value="<?php echo $date; ?>"></p>
    <p>Type: <?php echo $strTypes; ?></p>
    <p>Value: <input type="text" name="value" id="value" value="<?php echo $value; ?>"></p>
    <p><?php echo $result; ?></p>
    <input type="submit" value="Submit">   
  </form>
</body>

</html>
-----------
Cập nhật [14/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (69) - Bài tập về thời gian 1

Tiếp theo của: Ngu ngơ học làm web (68) - Datepicker
------

Phần 69. Bài tập về thời gian 1


Đây là clip số 57:


Nội dung bài tập:

- Định dạng lại cách hiển thị ngày tháng khi sử dụng Datepicker

- Hiển thị thời gian dạng: 01:57 PM Thứ 6, ngày 25/11/2016

- Kiểm tra năm nhuận

- Tìm số ngày trong tháng, của một năm nào đó

- Xác định khoảng thời gian đã trôi qua

Để chuyển thời gian từ kiểu chuỗi về kiểu timestamp, sử dụng hàm strtotime(time). Tuy nhiên, hàm này không phải khi nào cũng cho ra kết quả đúng, nên sử dụng hàm khác.

Tại sao phải đổi thời gian từ dạng chuỗi (ví dụ ‘26 November 2016’) sang kiểu timestamp (ví dụ 1480093200), lý do là để dễ xử lý, ví dụ hàm chuyển đổi kiểu định dạng ngày tháng date() chỉ thực hiện được trên timestamp.

Ví dụ,

echo 'Output: '.date('d-m-Y', strtotime('26 November 2016'));

Để chuyển thời gian từ kiểu chuỗi về kiểu timestamp, nên sử dụng hàm date_parse_from_format(format, date).

Ví dụ,

$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);

Đây là đoạn mã minh họa việc đổi qua lại giữa một số định dạng về ngày tháng:

<?php
      echo 'Input: '.$date.'<br>';
      // chuyển từ dạng chuỗi về dạng mảng
      $date = date_parse_from_format('d-m-Y', $date);
      // chuyển từ dạng mảng thành dạng timestamp (dạng số)
      $timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
      // định dạng hiển thị theo ý muốn (dạng chuỗi)
      echo 'Output: '.date('m-d-Y', $timestamp);
    ?>

Bài tập, định dạng và xuất thời gian theo mẫu sau: 01:57 PM Thứ 6, ngày 25/11/2016

Hàm date('h:i A D, d-m-Y',time()); sẽ xuất ra màn hình là 10:04 AM Sat, 26-11-2016

Đoạn mã của bài tập,

<?php
  $arrEn = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
  $arrVi = array('Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7', 'Chủ nhật');
  $result = date('h:i A D, d-m-Y',time());
  $result = str_replace($arrEn, $arrVi, $result);
  $result = str_replace(',', ', ngày', $result);

  echo $result;
?>

Ở đoạn mã trên, có cách khác để xuất chữ ‘ngày’ là:

$result = date('h:i A D, \n\g\à\y d-m-Y',time());

Đây là clip số 58:


Để kiểm tra có phải là năm nhuận hay không, sử dụng hàm checkdate của PHP, ý tưởng là kiểm tra xem năm đó có ngày 29/2 không? Nếu có, thì là năm nhuận.

Ví dụ,

<?php
  $year = 2016;
   if(checkdate(2, 29, $year)) {
    echo 'Là năm nhuận';
   }else {
    echo 'Không là năm nhuận';
   }
  echo $result;
?>

Để xác định một tháng có bao nhiêu ngày sử dụng hàm date() như sau:

<?php
  $year = 2016;
  $month = 2;

  $timestamp = mktime(0, 0, 0, $month, 1, $year);
  $totalDays = date('t', $timestamp);
  
  echo $totalDays;
?>

Tính khoảng thời gian đã trôi qua tính từ một thời điểm.

Đây là clip số 59:


Tính khoảng thời gian đã trôi qua tính từ một thời điểm (tiếp).

Lưu lại đoạn mã để tham khảo:

<?php
  $timePost = '26/11/2016 16:06:05';
  $timeReply = '28/11/2016 18:08:06';
  // đổi thời gian từ chuỗi -> mảng
  $arrPost = date_parse_from_format('d/m/Y H:i:s', $timePost);
  $arrReply = date_parse_from_format('d/m/Y H:i:s', $timeReply);
  // đổi thời gian từ mảng -> timestamp
  $tsPost = mktime($arrPost['hour'], $arrPost['minute'], $arrPost['second'], $arrPost['month'], $arrPost['day'], $arrPost['year']);
  $tsReply = mktime($arrReply['hour'], $arrReply['minute'], $arrReply['second'], $arrReply['month'], $arrReply['day'], $arrReply['year']);
  $interval = $tsReply - $tsPost;

  $result = '';
  switch ($interval) {
    case $interval < 60:
      $result = ($interval == 1) ? $interval.' second ago' : $interval.' seconds ago';
      break;
    case ($interval >= 60 && $interval < 3600):
      $minute = round($interval/60);
      $result = ($minute == 1) ? $minute.' minute ago' : $minute.' minutes ago';
      break;
    case ($interval >= 3600 && $interval < 86400):
      $hour = round($interval/3600);
      $result = ($hour == 1) ? $hour.' hour ago' : $hour.' hours ago';
      break;
    case (round($interval/86400) == 1):
      $result = 'Yesterday at '.date('H:i:s', $tsReply);
      break;
    default:
      $result = date('d/m/Y \a\t H:i:s', $tsReply);
      break;
  }
  echo $result;

?>
-----------
Cập nhật [14/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (68) - Datepicker

Tiếp theo của: Ngu ngơ học làm web (67) - Thời gian trong PHP
------

Phần 68. Datepicker

Đây là clip số 56: datepicker


datepicker là một tiện ích cho phép người dùng chọn ngày tháng được tiện lợi, chính xác.

Muốn hiểu phần này cần có kiến thức về jQuery UI, để dễ hiểu jQuery UI cần có kiến thức về jQuery, để hiểu jQuery cần học cơ bản về JavaScript. Vậy thứ tự cần học là JavaScript > jQuery > jQuery UI.

Sử dụng datepicker của jQuery UI tại đây: https://jqueryui.com/datepicker/

Để đổi cách hiển thị mm/dd/yyyy thành dd/mm/yyyy, tìm hiểu tại đây: http://api.jqueryui.com/datepicker/#option-dateFormat

Ví dụ,

$( function() {
    $( "#datepicker" ).datepicker({ dateFormat: "dd/mm/yy" });
  } );

Để đổi ngày mặc định khi xuất hiện datepicker, tham khảo tại đây: http://api.jqueryui.com/datepicker/#option-defaultDate

Ví dụ,

$( function() {
    $( "#datepicker" ).datepicker({
      dateFormat: "dd/mm/yy",
      defaultDate: "-1m"
    });
} );

Để cho phép người dùng chọn năm, tham khảo tại đây: http://api.jqueryui.com/datepicker/#option-changeYear

Ví dụ,

$( function() {
    $( "#datepicker" ).datepicker({
      dateFormat: "dd/mm/yy",
      defaultDate: "-1m",
      changeYear: true,
yearRange: "2012:2020"
    });
  } );

Đây là đoạn mã có sử dụng datepicker,

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="jquery-ui-1.12.1.custom/jquery-ui.css">
  <script src="jquery-ui-1.12.1.custom/external/jquery/jquery.js"></script>
  <script src="jquery-ui-1.12.1.custom/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#datepicker" ).datepicker({
      dateFormat: "dd/mm/yy",
      defaultDate: "-1m",
      changeYear: true,
      yearRange: "2012:2020"
    });
  } );
  </script>
</head>
<body>
<?php
  $date = (isset($_POST['datepicker'])) ? $_POST['datepicker'] : '';
?>
  <form action="#" method="post" id="mainForm" name="mainForm">
    <p>Date: <input readonly="readonly" type="text" name="datepicker" id="datepicker" value="<?php echo $date; ?>"></p>
    <input type="submit" value="Submit">   
  </form>
</body>

</html>
-----------
Cập nhật [14/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (67) - Thời gian trong PHP

Tiếp theo của: Ngu ngơ học làm web (66) - Số trong PHP

------

Phần 67. Thời gian trong PHP

Đây là clip số 54:


Sử dụng hàm getdate() để lấy thời gian hiện tại của máy chủ.

Đây là giá trị trả về của hàm getdate():

Array
(
    [seconds] => 36
    [minutes] => 21
    [hours] => 11
    [mday] => 24
    [wday] => 4
    [mon] => 11
    [year] => 2016
    [yday] => 328
    [weekday] => Thursday
    [month] => November
    [0] => 1479961296
)

Hàm date_default_timezone_get(); trả về múi giờ hiện tại được thiết lập sẵn.

Hàm date_default_timezone_set(); để thiết lập múi giờ mặc định. Ví dụ:
date_default_timezone_set('Asia/Ho_Chi_Minh');

Hàm timezone_identifiers_list(); để xem danh sách các múi giờ.

Để xác định khoảng thời gian (timestamp, tính bằng giây) so với mốc thời gian 1/1/1970; sử dụng hàm:

- time(): trả về số giây từ thời điểm hiện tại so với 1/1/1970. Ví dụ: 1509535407

- mktime(): trả về số giây từ một thời điểm bất kì so với 1/1/1970. Ví dụ,

$time = mktime(0,0,0,12/12/2015);//gio,phut,giay,thang,ngay,nam
            echo $time;

Kết quả xuất ra là: 1451235600

Sử dụng hàm date() để định dạng cách hiển thị ngày tháng. Ví dụ,

$time = time();
            echo date('d/m/y', $time);

Kết quả xuất ra là: 24/11/16

Ví dụ,

date('d/m/Y', $time);

Kết quả xuất ra là 24/11/2016

Ví dụ,

$time = mktime(0,0,0,12,2,2015);
            echo date('d/m/Y', $time);

Kết quả xuất ra là: 02/12/2015

Vào đây để xem thêm về các tham số của hàm date(): http://php.net/manual/en/function.date.php

Đây là clip số 55:


Sử dụng hàm checkdate(month, day, year) để kiểm tra sự hợp lệ của một ngày nào đó. Ví dụ,

$result = checkdate(2,31,2015);
            echo $result;

Bài tập về ngày tháng: cho người dùng nhập ngày, tháng, năm; sau khi người dùng bấm nút Submit, hệ thống sẽ thông báo “thời gian nhập vào” là hợp lệ hay không hợp lệ.

Đây là đoạn mã,

<!DOCTYPE html>
<html lang="en">
<head>
            <meta charset="UTF-8">
            <title>Document</title>
            <style>
                        * { margin: 0px; padding: 0px; }
                        .content { margin: 20px auto; width: 600px;  border: 2px solid #ddd;           padding: 10px; }
                        .content h1 { text-align: center; color: #F00; margin-bottom: 10px; }
                        .content div.row { margin-bottom: 10px; }
                        .content div.row span { width: 100px; display: inline-block; }
                        .content div.row select { width: 100px; }
                        .content div.result span { margin: 10px 0px; display: inline-block;    }
                        .content div.row input[type=submit] { padding: 2px 10px; }
            </style>
</head>
<body>
<?php
            $arrDays = range(1, 31);
            $arrMonths = range(1, 12);
            $arrYears = range(1970, 2020);
            function createSelectBox ($arrData, $name, $keySelected) {
                        $strDays = '';
                        if(!empty($arrData)) {
                                    $strDays .= '<select name="'.$name.'">';
                                    foreach ($arrData as $key => $value) {
                                                if($value == $keySelected) {
                                                                        $strDays .= '<option value="'.$value.'" selected=true>'.$value.'</option>';
                                                            }else {
                                                                        $strDays .= '<option value="'.$value.'">'.$value.'</option>';
                                                            }
                                    }
                                    $strDays .= '</select>';
                        }
                        return $strDays;
            }
           
            $day = (isset($_POST['days-select'])) ? $_POST['days-select'] : 0;
            $month = (isset($_POST['months-select'])) ? $_POST['months-select'] : 0;
            $year = (isset($_POST['years-select'])) ? $_POST['years-select'] : 0;

            $strDays = createSelectBox($arrDays,'days-select', $day);
            $strMonths = createSelectBox($arrMonths,'months-select', $month);
            $strYears = createSelectBox($arrYears,'years-select', $year);
?>
            <div class="content">
            <h1>Kiểm tra ngày tháng</h1>
                        <form action="#" method="post" id="mainForm" name="mainForm">
                                    <div class="row"> <span>Ngày</span><?php echo $strDays; ?></div>
                                    <div class="row"> <span>Tháng</span><?php echo $strMonths; ?></div>
                                    <div class="row"> <span>Năm</span><?php echo $strYears; ?></div>
                                    <div class="row"> <input type="submit" value="Check date"></div>
                                    <div class="result"> <span>Người dùng đã nhập: </span>
                                    <?php
                                                echo ' '.$day.'/'.$month.'/'.$year . '<br>';
                                                if(checkdate($month, $day, $year)) {
                                                            echo '<b>Ngày hợp lệ</b>';
                                                }else {
                                                            echo '<b>Ngày không hợp lệ</b>';
                                                }
                                    ?>
                                    </div>
                        </form>
            </div>
</body>

</html>
-----------
Cập nhật [14/9/2020]
-----------
Xem thêm:

Bạn muốn tự học HTML bài bản? Xem thêm

Ngu ngơ học làm web (66) - Số trong PHP

Tiếp theo của: Ngu ngơ học làm web (65) - Chuỗi trong PHP - phần 3
------

Phần 66. Số trong PHP

Đây là clip số 50:


Số trong PHP gồm hai loại: số nguyên và số thập phân.

Để kiểm tra một biến có chứa giá trị kiểu số hay không, sử dụng các hàm: is_numeric, is_int, is_float.

Để tạo một dãy số, sử dụng hàm range($start, $end, $loop).

Để làm tròn một số thập phân, sử dụng hàm:

- round(): làm tròn đến số nguyên gần nhất.

- ceil(): là tròn lên.

- floor(): làm tròn xuống.

Để tìm số nhỏ nhất, lớn nhất và tính tổng của một dãy số, sử dụng các hàm min(), max(), và array_sum() tương ứng.

Có thể sử dụng hàm sort(), sau đó lấy phần tử đầu và cuối để tìm số lớn nhất và nhỏ nhất của một dãy số.

Có thể chuyển một chuỗi các số  (ví dụ ‘1, 2, 3, 4’) thành một mảng, sau đó thực hiện tính toán trên mảng. Ví dụ,

$str = '1, 2, 3, 4';
$arr = explode(',', $str);
echo array_sum($arr);

Đây là clip số 51:


Sử dụng hàm rand(min, max), để tạo một số ngẫu nhiên nằm trong khoảng [min – max].

Để định dạng cách hiển thị của một số, sử dụng hàm number_format().

Sử dụng hàm abs() để trả về giá trị tuyệt đối của một số. Hàm lũy thừa là pow(x, y). Hàm khai căn bậc hai là sqrt().

Đây là clip số 52:


Đoạn mã tối giản phân số,

<?php
            $fraction = '18/9';
            $arrFraction = explode('/', $fraction);
            $ts = $arrFraction[0];
            $ms = $arrFraction[1];

            function UCLN($n1, $n2) {
                        for($i = 1; $i <= $n1; $i++) {
                                    if($n1 % $i == 0) { $uclnN1[] = $i; }
                        }
                        for($i = 1; $i <= $n2; $i++) {
                                    if($n2 % $i == 0) { $uclnN2[] = $i; }
                        }
                        $temp = array_intersect($uclnN1, $uclnN2);
                        $result = max($temp);
                        return $result;
            }
            $ucln = UCLN($ts, $ms);
            $ts = $ts/$ucln;
            $ms = $ms/$ucln;
            echo $ts.'/'.$ms;
?>

Đây là clip số 53:


Đoạn mã hàm tối giản phân số,

function optimizeFraction($fraction) {
                        $arrFraction = explode('/', $fraction);
                        $ucln = UCLN($arrFraction[0], $arrFraction[1]);
                        $arrFraction[0] /= $ucln;
                        $arrFraction[1] /= $ucln;
                        return $arrFraction;
            }

Đoạn mã nhân hai phân số,

$fraction1 = '8/2';
            $fraction2 = '6/3';
            $fraction1 = optimizeFraction($fraction1);
            $fraction2 = optimizeFraction($fraction2);
            $result[0] = $fraction1[0] * $fraction2[0];
            $result[1] = $fraction1[1] * $fraction2[1];

            $result = implode('/', $result);
-----------
Cập nhật [14/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (65) - Chuỗi trong PHP – phần 3

Tiếp theo của: Ngu ngơ học làm web (64) - Chuỗi trong PHP – phần 2
------

Phần 65. Chuỗi trong PHP - phần 3

Đây là clip số 44:


Sử dụng hàm addslashes($str) để thêm dấu \ vào trước các kí tự: ‘, “, \. Ví dụ, echo addslashes('abc  \  fd "');

Sử dụng hàm addcslashes($str, $character) để thêm dấu \ vào trước các kí tự $character. echo addcslashes('a b c', 'ac');

Sử dụng hàm stripslashes($str) để loại bỏ các dấu \ được thêm vào bằng hàm addslashes trước đó. Ví dụ, echo stripslashes('\\a \"b\" \\c');

Sử dụng hàm stripcslashes($str) để loại bỏ các dấu \ được thêm vào bằng hàm addcslashes trước đó. Ví dụ, echo stripcslashes('b \k \c');

Đọc thêm về HTML entities. Ví dụ: &gt; (dấu >), &copy; (dấu copyright).

Đây là clip số 45:


Sử dụng hàm htmlspecialchars($str) để chuyển đổi các kí tự được quy định trước sang giá trị HTML entities.

Ví dụ, chạy hai lệnh này, rồi vào xem mã HTML để hiểu về hàm htmlspecialchars($str),

<?php
            echo '<b>Nguyen</b> Van Teo';
            echo htmlspecialchars('<b>Nguyen</b> Van Teo');
?>

Sử dụng hàm htmlspecialchars_decode($str) để chuyển đổi các giá trị HTML entities (do dùng hàm htmlspecialchars trước đó) về giá trị ban đầu. Ví dụ, echo htmlspecialchars_decode('&lt;b&gt;Nguyen&lt;/b&gt; Van Teo');

Sử dụng hàm htmlentities($str); để chuyển đổi các kí tự sang giá trị HTML entities.

Sử dụng hàm html_entity_decode($str); để chuyển đổi các giá trị HTML entities được gọi bởi hàm htmlentities về giá trị ban đầu.

Sử dụng hàm get_html_translation_table để xuất các HTML entities và special character. Ví dụ, chạy ba ví dụ sau để xem kết quả,

$array = get_html_translation_table();

$array = get_html_translation_table(HTML_ENTITIES);

$array = get_html_translation_table(HTML_SPECIALCHARS);

echo '<pre>';
print_r($array);
echo '<pre>';

Sử dụng hàm strip_tags($str) để loại bỏ các thẻ HTML trong chuỗi. Ví dụ:

<?php
  $str = '<script>alert("Đã bị nhiễm mã độc!!!!");</script>';
  echo $str;
  echo strip_tags('<script>alert("Đã bị nhiễm mã độc!!!!");</script>')
 ?>

Đây là clip số 46: bài tập “đọc các số có ba chữ số”


Đây là clip số 47: bài tập “đọc các số có ba chữ số” (tiếp)


Để chuyển số thành chuỗi, sử dụng hàm strval();

Lưu lại mã nguồn để tham khảo,

<?php
            /*
            * 100 một trăm
            * 101 một trăm linh một
            * 111 một trăm mười một
            * 121 một trăm hai mươi mốt
            * 105 một trăm linh năm
            * 115 một trăm mười lăm
            * 145 một trăm bốn mươi lăm
            */        
            $arrayNumber = array (
                                                                                    0 => 'không',
                                                                                    1 => 'một',
                                                                                    2 => 'hai',
                                                                                    3 => 'ba',
                                                                                    4 => 'bốn',
                                                                                    5 => 'năm',
                                                                                    6 => 'sáu',
                                                                                    7 => 'bảy',
                                                                                    8 => 'tám',
                                                                                    9 => 'chín',
                        );
            $number =215;
            function readNumber3Digit($number, $dictionaryNumber, $readFull = true)
            {
                        $number = strval($number); 
                        $number = str_pad($number, 3, 0, STR_PAD_LEFT);
                        echo $number;
                        // lấy chữ số ở hàng đơn vị, chục, trăm
                        $digit_0 = substr($number, 2, 1);
                        $digit_00 = substr($number, 1, 1);
                        $digit_000 = substr($number, 0, 1);
                        // đọc số hàng trăm
                        $str_000 = $dictionaryNumber[$digit_000].' trăm ';
                        // đọc số hàng chục
                        // 0: linh; 1: mười; 2-9: 2 -9 mươi
                        $str_00 = $dictionaryNumber[$digit_00].' mươi ';
                        if($digit_00 == 0) { $str_00 = ' linh '; }
                        if($digit_00 == 1) { $str_00 = ' mười '; }
                        // đọc số hàng đơn vị
                        // 1: mốt - khi $digit_00 > 1
                        // 5: lăm - khi $digit_00 > 0
                        $str_0 = $dictionaryNumber[$digit_0];
                        if($digit_00 > 1 && $digit_0 == 1) { $str_0 = ' mốt'; }
                        if($digit_00 >= 1 && $digit_0 == 5) { $str_0 = ' lăm'; }
                        if($digit_00 > 1 && $digit_0 == 0) { $str_0 = ' '; }
                        if($digit_00 == 0 && $digit_0 == 0) {
                                    $str_0 = ' ';
                                    $str_00 = ' ';
                        }
                        if($readFull == false) {
                                    if($digit_000 == 0) { $str_000 = ' '; }
                                    if($digit_000 == 0 && $digit_00 == 0) { $str_00 = ' '; }
                        }
                        $result = $str_000.$str_00.$str_0;
                        return $result;
            }
           
            $result = readNumber3Digit($number, $arrayNumber, false);
                       
            echo $result;
?>

Đây là clip số 48: đọc số có 12 chữ số


Lưu lại đoạn mã để tham khảo,

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<?php
  /*
  * 100 một trăm
  * 101 một trăm linh một
  * 111 một trăm mười một
  * 121 một trăm hai mươi mốt
  * 105 một trăm linh năm
  * 115 một trăm mười lăm
  * 145 một trăm bốn mươi lăm
  */ 
  $dictNumbers = array (
              0 => 'không',
              1 => 'một',
              2 => 'hai',
              3 => 'ba',
              4 => 'bốn',
              5 => 'năm',
              6 => 'sáu',
              7 => 'bảy',
              8 => 'tám',
              9 => 'chín'
          );
  $dictUnits = array (
          0 => 'tỷ',
          1 => 'triệu',
          2 => 'nghìn',
          3 => 'đồng'
        );
  $number =20000000;
  function readNumber3Digit($number, $dictionaryNumber, $readFull = true)
  {
    $number = strval($number); 
    $number = str_pad($number, 3, 0, STR_PAD_LEFT);
    // lấy chữ số ở hàng đơn vị, chục, trăm
    $digit_0 = substr($number, 2, 1);
    $digit_00 = substr($number, 1, 1);
    $digit_000 = substr($number, 0, 1);
    // đọc số hàng trăm
    $str_000 = $dictionaryNumber[$digit_000].' trăm ';
    // đọc số hàng chục
    // 0: linh; 1: mười; 2-9: 2 -9 mươi
    $str_00 = $dictionaryNumber[$digit_00].' mươi ';
    if($digit_00 == 0) { $str_00 = ' linh '; }
    if($digit_00 == 1) { $str_00 = ' mười '; }
    // đọc số hàng đơn vị
    // 1: mốt - khi $digit_00 > 1
    // 5: lăm - khi $digit_00 > 0
    $str_0 = $dictionaryNumber[$digit_0];
    if($digit_00 > 1 && $digit_0 == 1) { $str_0 = ' mốt '; }
    if($digit_00 >= 1 && $digit_0 == 5) { $str_0 = ' lăm '; }
    if($digit_00 > 1 && $digit_0 == 0) { $str_0 = ''; }
    if($digit_00 == 0 && $digit_0 == 0) {
      $str_0 = '';
      $str_00 = '';
    }
    if($readFull == false) {
      if($digit_000 == 0) { $str_000 = ''; }
      if($digit_000 == 0 && $digit_00 == 0) { $str_00 = ''; }
    }
    $result = $str_000.$str_00.$str_0;
    return $result;
  }
  // end readNumber3Digit
  function formatString($str, $type = null) {
    // chuyển về dạng chữ thường
    $str = strtolower($str);
    // bỏ khoảng trắng trái-phải
    $str = trim($str);
    // bỏ khoảng trắng thừa ở giữa
    // chuyển chuỗi thành mảng
    $array = explode(' ', $str);
    // bỏ các phần tử khoảng trắng trong mảng
    foreach ($array as $key => $value) {
      if(trim($value) == null) {
        unset($array[$key]);
        continue;
      }
      if($type == 'danh-tu') $array[$key] = ucfirst($value);
    }
    // chuyển mảng thành chuỗi
    $result = implode(' ', $array);
    // chuyển kí tự đầu tiên của chuỗi thành chữ hoa
    $result = ucfirst($result);
    return $result;
  }
  // end formatString
  function readNumber12Digits($number, $dictUnits, $dictNumbers) {
    $number = strval($number);
    $number = str_pad($number, 12, 0, STR_PAD_LEFT);
    $arrNumber = str_split($number, 3);
    foreach ($arrNumber as $key => $value) {
      if($value != '000') {
        $index = $key;
        break;
      }
    }
    foreach ($arrNumber as $key => $value) {
      if($key >= $index) {
        $readFull = true;
        if($key == $index) $readFull = false;
        $result[$key] = readNumber3Digit($value, $dictNumbers, $readFull).' '.$dictUnits[$key];
      }
    }

    $result = implode(' ', $result);
    $result = formatString($result);

    $result = str_replace('không đồng', 'đồng', $result);
    $result = str_replace('không trăm đồng', 'đồng', $result);
    $result = str_replace('không nghìn đồng', 'đồng', $result);
    $result = str_replace('không trăm nghìn đồng', 'đồng', $result);
    $result = str_replace('không triệu đồng', 'đồng', $result);
    $result = str_replace('không trăm triệu đồng', 'đồng', $result);
    $result = str_replace('không tỷ triệu đồng', 'đồng', $result);
    return $result;
  }

  $result = readNumber12Digits($number, $dictUnits, $dictNumbers);
  echo $result;
?>
</body>
</html>

Đây là clip số 49: ôn tập về chuỗi


-----------
Cập nhật [9/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web