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ụ: > (dấu >), © (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