🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

[PHP สำหรับผู้เริ่มต้น] เวทมนตร์ที่นำกลับมาใช้ใหม่ได้! วิธีสร้างข้อความตัดตอนด้วยฟังก์ชัน (function)

ในหน้าดัชนีของบล็อก คุณเคยต้องการแสดงแค่ส่วนเริ่มต้นสั้นๆ ของแต่ละบทความหรือไม่? "ข้อความตัดตอน" ที่บอกผู้อ่านว่า "นี่คือเนื้อหาเกี่ยวกับบทความนี้" มีความสำคัญมากในการกระตุ้นให้พวกเขาเรียกดูเว็บไซต์ของคุณ แต่การสร้างข้อความตัดตอนด้วยตนเองทุกครั้งที่เพิ่มบทความเป็นเรื่องที่น่าเบื่อใช่ไหมครับ?

บทความนี้จะแนะนำเครื่องมือวิเศษใน PHP ที่เรียกว่า ฟังก์ชัน (function) ซึ่งช่วยแก้ปัญหานี้ได้ เรามาลองสร้าง "เครื่องมือสร้างข้อความตัดตอน" ที่มีประโยชน์ของเราเองในรูปแบบฟังก์ชัน PHP ที่รับข้อความยาวๆ มาตัดตามจำนวนตัวอักษรที่ระบุ และต่อท้ายด้วย "...อ่านต่อ" กันครับ นอกจากนี้เรายังจะอธิบายเกี่ยวกับ `htmlspecialchars()` ซึ่งจำเป็นสำหรับความปลอดภัยด้วย ดังนั้นคุณจะได้โค้ดที่ทั้งปลอดภัยและใช้งานได้จริง แม้แต่ผู้เริ่มต้นก็สามารถคัดลอกและวางได้เลยครับ!

สำหรับการเตรียมตัวเพื่อรัน PHP (สภาพแวดล้อมการพัฒนา) หากคุณยังไม่ได้ติดตั้ง XAMPP โปรดอ้างอิงจาก [PHP สำหรับผู้เริ่มต้น] คู่มือฉบับสมบูรณ์เกี่ยวกับการดาวน์โหลดและติดตั้ง XAMPP!. หลังจากติดตั้งแล้ว เพียงแค่วางไฟล์ PHP ของคุณในโฟลเดอร์ที่กำหนด (เช่น `htdocs`) ก็พร้อมใช้งานแล้วครับ!

1. "ฟังก์ชัน" เวทมนตร์จัดระเบียบโค้ดคืออะไร?

ก่อนอื่น "ฟังก์ชัน" คืออะไร? พูดง่ายๆ ก็คือ มันเหมือนกับ "เครื่องมือที่สร้างขึ้นเอง" ที่คุณรวบรวมกระบวนการเฉพาะอย่างไว้ด้วยกัน ตั้งชื่อให้มัน และสามารถเรียกใช้ได้ทุกเมื่อ

ตัวอย่างเช่น หากคุณสร้างฟังก์ชันสำหรับขั้นตอน "รับข้อความ ตัดให้เหลือ 100 ตัวอักษร และต่อท้ายด้วย '...'" คุณก็เพียงแค่เรียกใช้ฟังก์ชันนั้นทุกครั้งที่ต้องการข้อความตัดตอน คุณไม่จำเป็นต้องเขียนโค้ดเดิมซ้ำแล้วซ้ำอีก ซึ่งทำให้โค้ดทั้งหมดของคุณสะอาดและจัดการได้ง่ายขึ้น นี่คือข้อได้เปรียบที่ใหญ่ที่สุดของฟังก์ชัน

ไวยากรณ์พื้นฐานมีดังนี้:

<?php
function aชื่อฟังก์ชัน(อาร์กิวเมนต์1, อาร์กิวเมนต์2, ...) {
  // เขียนกระบวนการที่คุณต้องการให้ทำงานที่นี่

  return ค่าที่ส่งคืน; // ส่งคืนผลลัพธ์ของกระบวนการ
}
?>

มันง่ายที่จะเข้าใจถ้าคุณคิดว่า อาร์กิวเมนต์ (arguments) เป็น "ส่วนผสม" ที่คุณส่งให้ฟังก์ชัน และ ค่าที่ส่งคืน (return value) เป็น "ผลิตภัณฑ์สำเร็จรูป" ที่ฟังก์ชันส่งกลับมาให้ ตอนนี้ เรามาใช้ไวยากรณ์นี้เพื่อสร้างฟังก์ชันสร้างข้อความตัดตอนของเรากันครับ

2. ภาคปฏิบัติ! มาสร้างฟังก์ชันเพื่อสร้างข้อความตัดตอนกันเถอะ

นี่คือส่วนหลักของบทความนี้ เราจะสร้างฟังก์ชันชื่อ `make_excerpt()` ซึ่งคุณสามารถให้ข้อความยาวๆ และจำนวนตัวอักษรได้ และมันจะส่งคืนข้อความตัดตอนที่ย่ออย่างสวยงาม โค้ดด้านล่างเป็นตัวอย่าง HTML ที่สมบูรณ์ซึ่งคุณสามารถคัดลอกและวางลงในไฟล์เพื่อดูการทำงานในเบราว์เซอร์ของคุณได้ทันที

<!DOCTYPE html>
<html lang="th">
<head>
    <meta charset="UTF-8">
    <title>เครื่องมือสร้างข้อความตัดตอน</title>
    <style>
        body { font-family: sans-serif; line-height: 1.6; padding: 20px; }
        .original-text { background: #f4f7f6; border-left: 5px solid #ccc; padding: 10px; margin-bottom: 20px; }
        .excerpt { background: #e8f4f8; border-left: 5px solid #007bff; padding: 10px; }
    </style>
</head>
<body>

    <h1>ทดสอบการสร้างข้อความตัดตอน</h1>

    <?php
    /**
     * สร้างข้อความตัดตอน
     * @param string $text ข้อความต้นฉบับ
     * @param int $length ขีดจำกัดตัวอักษร
     * @return string ข้อความตัดตอนที่สร้างขึ้น
     */
    function make_excerpt(string $text, int $length): string {
        // ตรวจสอบจำนวนตัวอักษรของข้อความต้นฉบับ
        if (mb_strlen($text) > $length) {
            // ตัดตามจำนวนตัวอักษรที่ระบุและต่อท้ายด้วย "...อ่านต่อ"
            return mb_substr($text, 0, $length) . '...อ่านต่อ';
        } else {
            // หากจำนวนตัวอักษรน้อยกว่าขีดจำกัด ให้ส่งคืนตามเดิม
            return $text;
        }
    }

    // ข้อความต้นฉบับที่ยาว
    $long_text = 'นี่เป็นข้อความที่ยาวมาก บทความนี้อธิบายอย่างละเอียดเกี่ยวกับวิธีใช้ฟังก์ชัน PHP เพื่อตัดข้อความตามจำนวนตัวอักษรที่กำหนดและสร้างข้อความตัดตอน นี่เป็นเทคนิคที่ใช้ได้จริงและมีประโยชน์สำหรับหน้าดัชนีบล็อกและอื่นๆ';

    // เรียกใช้ฟังก์ชันเพื่อสร้างข้อความตัดตอน 50 ตัวอักษร
    $excerpt_text = make_excerpt($long_text, 50);
    ?>

    <h2>ข้อความต้นฉบับ</h2>
    <div class="original-text">
        <?php echo $long_text; ?>
    </div>

    <h2>ข้อความตัดตอนที่สร้างขึ้น (จำกัด 50 ตัวอักษร)</h2>
    <div class="excerpt">
        <?php echo $excerpt_text; ?>
    </div>

</body>
</html>

จุดสำคัญในโค้ดนี้คือ `mb_strlen()` และ `mb_substr()` ในการจัดการกับอักขระหลายไบต์อย่างถูกต้อง เช่น ภาษาญี่ปุ่น คุณต้องใช้ฟังก์ชันที่ขึ้นต้นด้วย `mb_` แทน `strlen()` หรือ `substr()` ซึ่งจะช่วยป้องกันข้อความที่อ่านไม่ออกและทำให้แน่ใจว่าคุณสามารถตัดข้อความตามจำนวนอักขระที่ต้องการได้

3. สำคัญ! การแสดงผลอย่างปลอดภัยด้วย htmlspecialchars

เมื่อแสดงข้อความบนหน้าเว็บ สิ่งหนึ่งที่คุณไม่ควรลืมคือความปลอดภัย หากข้อความที่จะแสดงมีแท็ก HTML เช่น `<script>` การแสดงผลตามที่เป็นอยู่อาจทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์ (การโจมตีแบบ Cross-Site Scripting)

นี่คือที่มาของฟังก์ชัน `htmlspecialchars()` ฟังก์ชันนี้จะแปลงอักขระที่มีความหมายพิเศษใน HTML (เช่น `<`, `>`, `&`, `"`) เป็นสตริงที่ไม่เป็นอันตราย (เช่น `&lt;`, `&gt;`, `&amp;`, `&quot;`)

เรามาปรับปรุงฟังก์ชันการสร้างข้อความตัดตอนของเราโดยรวมกระบวนการนี้เข้าไปเพื่อทำให้ปลอดภัยยิ่งขึ้น

<?php
/**
 * ฟังก์ชันที่ปรับปรุงแล้วเพื่อสร้างข้อความตัดตอนที่ปลอดภัย
 */
function make_safe_excerpt(string $text, int $length): string {
    // 1. ขั้นแรก ให้ escape ด้วย htmlspecialchars
    $safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');

    // 2. ทำการตรวจสอบจำนวนตัวอักษรและตัดข้อความที่ escape แล้ว
    if (mb_strlen($safe_text) > $length) {
        return mb_substr($safe_text, 0, $length) . '...อ่านต่อ';
    } else {
        return $safe_text;
    }
}

// ข้อความที่อาจมีแท็ก HTML
$dangerous_text = '<strong>ข้อความที่เน้น</strong> และโค้ดที่เป็นอันตราย เช่น <script>alert("danger!");</script>';

// ใช้ฟังก์ชันที่ปรับปรุงแล้วเพื่อสร้างข้อความตัดตอนที่ปลอดภัย
$safe_excerpt = make_safe_excerpt($dangerous_text, 30);

echo $safe_excerpt;
?>

โดยการใช้ฟังก์ชัน `make_safe_excerpt()` นี้ แม้ว่าข้อความต้นฉบับจะมีแท็ก HTML อยู่ก็ตาม มันจะถูกแสดงอย่างปลอดภัยเป็นเพียงสตริงธรรมดา คุณจึงไม่ต้องกังวลว่ามันจะทำให้เค้าโครงของหน้าเว็บเสียหายหรือรันสคริปต์

4. ตัวอย่างประยุกต์: การใช้งานร่วมกับลูป foreach

ตอนนี้ เรามาผสมผสานฟังก์ชันสร้างข้อความตัดตอนที่มีประโยชน์นี้เข้ากับลูป `foreach` ที่เราได้เรียนรู้ไปในบทความก่อนหน้านี้กัน เราจะสร้างรายการชื่อเรื่องและข้อความตัดตอนแบบไดนามิกจากอาร์เรย์ของโพสต์ในบล็อก

<?php
// ฟังก์ชันสร้างข้อความตัดตอนที่ปลอดภัย (สมมติว่าได้กำหนดไว้จากตัวอย่างก่อนหน้านี้)
function make_safe_excerpt(string $text, int $length): string {
    $safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
    if (mb_strlen($safe_text) > $length) {
        return mb_substr($safe_text, 0, $length) . '...อ่านต่อ';
    }
    return $safe_text;
}

// อาร์เรย์ของข้อมูลโพสต์ในบล็อก
$blog_posts = [
    [
        "title" => "ฝึกฝนพื้นฐานของ PHP",
        "content" => "บทความนี้อธิบายไวยากรณ์พื้นฐานและตัวแปรของ PHP ออกแบบมาสำหรับผู้ที่เพิ่งเริ่มเขียนโปรแกรม ดังนั้นโปรดอ่านต่อไป"
    ],
    [
        "title" => "ความลับของการเชื่อมต่อฐานข้อมูล",
        "content" => "ฐานข้อมูลเป็นสิ่งจำเป็นสำหรับการพัฒนาเว็บ เมื่ออ่านบทความนี้ คุณจะเข้าใจวิธีเชื่อมต่อกับฐานข้อมูล MySQL จาก PHP และดึง/จัดการข้อมูลได้ใน 5 นาที มีโค้ดตัวอย่างมากมายรวมอยู่ด้วย"
    ]
];
?>

<div class="post-list">
    <?php foreach ($blog_posts as $post): ?>
        <article>
            <h3><?php echo htmlspecialchars($post['title']); ?></h3>
            <p><?php echo make_safe_excerpt($post['content'], 60); ?></p>
        </article>
    <?php endforeach; ?>
</div>

อย่างที่คุณเห็น เมื่อสร้างฟังก์ชันขึ้นมาแล้ว คุณสามารถเรียกใช้ซ้ำๆ ได้ในส่วนต่างๆ ของไซต์ของคุณ เช่น ภายในลูป การนำโค้ดกลับมาใช้ใหม่ได้สูงและการบำรุงรักษาที่ง่ายขึ้นเป็นข้อดีหลักของฟังก์ชัน

5. สรุปและแนะนำโค้ดที่เกี่ยวข้อง

ในบทความนี้ เราได้เรียนรู้วิธีใช้ "ฟังก์ชัน" ของ PHP เพื่อตัดข้อความตามจำนวนอักขระที่ระบุและสร้างข้อความตัดตอนที่ปลอดภัย ประโยชน์ของการใช้ฟังก์ชันคือการจัดระเบียบโค้ดและการปรับปรุงความสามารถในการนำกลับมาใช้ใหม่ ฟังก์ชัน `make_safe_excerpt` ที่เราสร้างขึ้นในวันนี้จะเป็นเครื่องมือที่มีประโยชน์ซึ่งจะช่วยคุณได้หลายครั้งในโครงการสร้างเว็บไซต์ของคุณอย่างแน่นอน

PHP มีฟังก์ชันที่มีประโยชน์อื่นๆ อีกมากมายสำหรับการจัดการสตริง ตัวอย่างเช่น `mb_strpos()` เพื่อค้นหาสตริงที่ต้องการ `str_replace()` เพื่อทำการแทนที่ และ `strip_tags()` เพื่อลบแท็ก HTML ทั้งหมด การผสมผสานฟังก์ชันเหล่านี้จะช่วยให้คุณสามารถประมวลผลข้อความขั้นสูงยิ่งขึ้นได้ เราขอแนะนำให้คุณลองค้นคว้าและทดลองใช้ดูครับ