أساسيات PHP

النصوص ودوال النصوص

13 دقيقة الدرس 5 من 45

النصوص ودوال النصوص

النصوص هي واحدة من أكثر أنواع البيانات استخداماً في PHP. في هذا الدرس، سنستكشف كيفية إنشاء ومعالجة وتحويل النصوص باستخدام الدوال المدمجة القوية في PHP.

إنشاء النصوص

توفر PHP طرقاً متعددة لإنشاء النصوص:

<?php // علامات اقتباس مفردة - نصوص حرفية $name = 'أحمد محمد'; $path = 'C:\xampp\htdocs'; // لا حاجة للهروب // علامات اقتباس مزدوجة - تفسر المتغيرات وتسلسلات الهروب $greeting = "مرحباً، $name"; $message = "أهلاً\nبك في PHP"; // \n سطر جديد // أقواس معقوفة للمتغيرات المعقدة $user = ['name' => 'أحمد']; echo "المستخدم: {$user['name']}"; // Heredoc - نصوص متعددة الأسطر مع التحليل $html = <<<HTML <div class="container"> <h1>مرحباً $name</h1> <p>هذا نص متعدد الأسطر</p> </div> HTML; // Nowdoc - نصوص متعددة الأسطر بدون تحليل (مثل علامات الاقتباس المفردة) $code = <<<'CODE' <?php echo "لن يتم تحليل هذا: $variable"; ?> CODE; ?>
أفضل ممارسة: استخدم علامات الاقتباس المفردة للنصوص الثابتة (أسرع). استخدم علامات الاقتباس المزدوجة فقط عندما تحتاج إلى إدراج متغيرات أو تسلسلات هروب.

تسلسلات الهروب

الأحرف الخاصة في النصوص ذات علامات الاقتباس المزدوجة:

تسلسلات الهروب الشائعة: \n - سطر جديد \r - عودة النقل \t - تاب \\ - شرطة مائلة للخلف \" - علامة اقتباس مزدوجة \$ - علامة دولار (منع تحليل المتغير) \' - علامة اقتباس مفردة (مطلوب في النصوص ذات الاقتباس المفرد) أمثلة: <?php echo "السطر 1\nالسطر 2"; // سطران echo "الاسم:\tأحمد"; // تاب بين الاسم: وأحمد echo "السعر: \$19.99"; // علامة دولار حرفية echo 'إنه يوم جميل'; // علامة اقتباس مفردة مُهرَّبة ?>

دمج النصوص

دمج النصوص باستخدام عامل النقطة (.):

<?php $firstName = "أحمد"; $lastName = "محمد"; // دمج أساسي $fullName = $firstName . " " . $lastName; // الدمج مع التعيين $message = "مرحباً"; $message .= "، "; $message .= $firstName; // دمج متعدد $html = "<div>" . "<h1>" . $fullName . "</h1>" . "<p>أهلاً بك!</p>" . "</div>"; // مختلط مع أنواع أخرى $age = 25; $info = "الاسم: " . $fullName . "، العمر: " . $age; ?>

طول النص

الحصول على عدد الأحرف في نص:

<?php $text = "مرحباً بالعالم"; $length = strlen($text); echo $length; // المخرج: عدد البايتات // استخدام عملي: التحقق $password = "abc123"; if (strlen($password) < 8) { echo "يجب أن تكون كلمة المرور 8 أحرف على الأقل"; } // نصوص متعددة البايتات (UTF-8) $arabic = "مرحباً"; echo strlen($arabic); // عدد البايتات (قد يكون خاطئاً) echo mb_strlen($arabic); // عدد الأحرف (صحيح) ?>
مهم: استخدم mb_strlen() للأحرف متعددة البايتات (عربي، صيني، إيموجي) بدلاً من strlen() للحصول على عدد أحرف دقيق.

تحويل حالة الأحرف

تغيير حالة النصوص:

<?php $text = "Hello World"; // تحويل إلى أحرف صغيرة echo strtolower($text); // المخرج: hello world // تحويل إلى أحرف كبيرة echo strtoupper($text); // المخرج: HELLO WORLD // جعل الحرف الأول كبيراً echo ucfirst($text); // المخرج: Hello world // جعل الحرف الأول من كل كلمة كبيراً echo ucwords($text); // المخرج: Hello World // جعل الحرف الأول صغيراً echo lcfirst("Hello"); // المخرج: hello // استخدام عملي: توحيد البريد الإلكتروني $email = "JohnDoe@EXAMPLE.COM"; $normalized = strtolower($email); // johndoe@example.com ?>

إزالة المسافات البيضاء

إزالة المسافات البيضاء من بداية و/أو نهاية النصوص:

<?php $text = " مرحباً بالعالم "; // إزالة من الجانبين echo trim($text); // "مرحباً بالعالم" // إزالة من الجانب الأيسر فقط echo ltrim($text); // "مرحباً بالعالم " // إزالة من الجانب الأيمن فقط echo rtrim($text); // " مرحباً بالعالم" // إزالة أحرف محددة $url = "///example.com///"; echo trim($url, "/"); // "example.com" // استخدام عملي: تنظيف مدخلات المستخدم $username = trim($_POST['username'] ?? ''); ?>
أفضل ممارسة: قم دائماً بتنظيف مدخلات المستخدم من النماذج لإزالة المسافات العرضية التي قد يدخلها المستخدمون.

البحث عن نصوص فرعية

البحث عن نص داخل النصوص:

<?php $text = "مرحباً بالعالم، أهلاً بك في عالم PHP"; // البحث عن أول حدوث (يُرجع الموضع أو false) $pos = strpos($text, "عالم"); echo $pos; // المخرج: رقم الموضع // البحث عن آخر حدوث $lastPos = strrpos($text, "عالم"); echo $lastPos; // المخرج: رقم الموضع // بحث غير حساس لحالة الأحرف $pos = stripos($text, "عالم"); echo $pos; // التحقق مما إذا كان النص يحتوي على نص فرعي if (strpos($text, "PHP") !== false) { echo "وجدت PHP"; } // PHP 8+ (موصى به) if (str_contains($text, "PHP")) { echo "وجدت PHP"; } // يبدأ بـ / ينتهي بـ (PHP 8+) if (str_starts_with($text, "مرحباً")) { echo "يبدأ بـ مرحباً"; } if (str_ends_with($text, "PHP")) { echo "ينتهي بـ PHP"; } ?>
مهم: استخدم دائماً !== false عند التحقق من نتائج strpos()، لأن الموضع 0 يُقيَّم كـ false في سياق منطقي.

استخراج نصوص فرعية

الحصول على أجزاء من نص:

<?php $text = "مرحباً بالعالم"; // استخراج من موضع إلى النهاية echo substr($text, 6); // استخراج بطول محدد echo substr($text, 0, 5); // إزاحة سالبة (من النهاية) echo substr($text, -5); // طول سالب (استبعاد من النهاية) echo substr($text, 0, -6); // استخراج جزء وسط echo substr($text, 3, 5); // استخدام عملي: اقتطاع النص $description = "هذا وصف طويل جداً..."; $short = mb_substr($description, 0, 50) . "..."; ?>

استبدال النص

البحث واستبدال النص داخل النصوص:

<?php $text = "مرحباً بالعالم"; // استبدال جميع الحدوث echo str_replace("عالم", "PHP", $text); // المخرج: مرحباً بـ PHP // استبدال غير حساس لحالة الأحرف echo str_ireplace("عالم", "PHP", $text); // استبدالات متعددة $text = "أحب التفاح والبرتقال"; $search = ["التفاح", "البرتقال"]; $replace = ["الموز", "العنب"]; echo str_replace($search, $replace, $text); // المخرج: أحب الموز والعنب // عد الاستبدالات $count = 0; $result = str_replace("ا", "X", "موزة", $count); echo $result; // المخرج: موزة echo $count; // المخرج: عدد الاستبدالات ?>

تقسيم ودمج النصوص

التحويل بين النصوص والمصفوفات:

<?php // تقسيم نص إلى مصفوفة $text = "تفاح،موز،برتقال"; $fruits = explode("،", $text); print_r($fruits); // Array([0]=>تفاح [1]=>موز [2]=>برتقال) // دمج مصفوفة في نص $joined = implode("، ", $fruits); echo $joined; // المخرج: تفاح، موز، برتقال // بديل: join() (اسم مستعار لـ implode) echo join(" - ", $fruits); // تقسيم بحد $text = "a:b:c:d:e"; $parts = explode(":", $text, 3); // Array([0]=>a [1]=>b [2]=>c:d:e) // استخدام عملي: تحليل CSV $csv = "أحمد،محمد،ahmad@example.com"; list($firstName, $lastName, $email) = explode("،", $csv); ?>
تذكر: explode() تنشئ مصفوفة من نص. implode() تنشئ نصاً من مصفوفة. فكر: "explode" يفكك، "implode" يجمع.

مقارنة النصوص

مقارنة النصوص بطرق مختلفة:

<?php $str1 = "تفاح"; $str2 = "تفاح"; $str3 = "موز"; // مقارنة حساسة لحالة الأحرف echo strcmp($str1, $str2); // 0 (متساوي) echo strcmp($str1, $str3); // < 0 (تفاح قبل موز) // مقارنة غير حساسة لحالة الأحرف echo strcasecmp($str1, $str2); // 0 // مقارنة أول n حرفاً echo strncmp("مرحبا", "مرحباً", 4); // 0 ?>

تنسيق النصوص

تنسيق النصوص بعلامات تحديد الموضع:

<?php // sprintf - إرجاع نص منسق $name = "أحمد"; $age = 25; $text = sprintf("الاسم: %s، العمر: %d", $name, $age); echo $text; // printf - عرض نص منسق printf("الاسم: %s، العمر: %d", $name, $age); // محددات التنسيق الشائعة: // %s - نص // %d - عدد صحيح // %f - عدد عشري // %b - ثنائي // %x - سداسي عشري // تنسيق الأماكن العشرية $price = 19.9567; echo sprintf("السعر: %.2f ريال", $price); // المخرج: السعر: 19.96 ريال // الحشو echo sprintf("%05d", 42); // المخرج: 00042 echo sprintf("%-10s", "test"); // المخرج: "test " ?>

دوال HTML و URL

التعامل مع HTML و URLs بأمان:

<?php // أحرف HTML الخاصة $text = "<script>alert('XSS')</script>"; echo htmlspecialchars($text); // المخرج: &lt;script&gt;alert('XSS')&lt;/script&gt; // إزالة علامات HTML $html = "<p>مرحباً <b>بالعالم</b></p>"; echo strip_tags($html); // المخرج: مرحباً بالعالم echo strip_tags($html, '<b>'); // المخرج: مرحباً <b>بالعالم</b> // ترميز URL $query = "مصطلح بحث بمسافات"; echo urlencode($query); // فك ترميز URL $encoded = "search%20term"; echo urldecode($encoded); // ترميز URL خام (للمسارات، وليس سلاسل الاستعلام) echo rawurlencode("path/to/file name.txt"); ?>
أمان: استخدم دائماً htmlspecialchars() عند عرض محتوى من إنشاء المستخدم في HTML لمنع هجمات XSS!

دوال نصوص أخرى مفيدة

<?php // عكس نص echo strrev("مرحبا"); // المخرج: ابحرم // تكرار نص echo str_repeat("*", 10); // المخرج: ********** // خلط أحرف نص echo str_shuffle("Hello"); // المخرج: ترتيب عشوائي // عد حدوث نص فرعي $text = "مرحباً بالعالم، أهلاً بعالم PHP"; echo substr_count($text, "عالم"); // المخرج: 2 // عد الكلمات echo str_word_count("مرحباً بالعالم"); // المخرج: 2 // تنسيق الأرقام echo number_format(1234567.89); // 1,234,568 echo number_format(1234567.89, 2); // 1,234,567.89 echo number_format(1234567.89, 2, '.', ','); // 1,234,567.89 // تحليل نص إلى متغيرات parse_str("name=أحمد&age=25", $data); print_r($data); // Array([name]=>أحمد [age]=>25) ?>

دوال النصوص متعددة البايتات

لدعم الأحرف الدولية (UTF-8):

<?php $text = "مرحباً بك في PHP"; // طول نص متعدد البايتات echo mb_strlen($text); // نص فرعي متعدد البايتات echo mb_substr($text, 0, 5); // تحويل حالة متعدد البايتات echo mb_strtoupper($text); echo mb_strtolower($text); // strpos متعدد البايتات echo mb_strpos($text, "PHP"); // تعيين الترميز الافتراضي mb_internal_encoding("UTF-8"); ?>

تمرين عملي:

المهمة: أنشئ برنامج نصي لمعالجة النصوص:

  • عرّف جملة: " PHP لغة قوية من جانب الخادم "
  • أزل المسافات البيضاء
  • حوّل إلى Title Case
  • احسب عدد الكلمات
  • استبدل "PHP" بـ "PHP 8"
  • استخرج أول 20 حرفاً
  • اعرض جميع النتائج

الحل:

<?php // النص الأصلي $sentence = " PHP لغة قوية من جانب الخادم "; // إزالة المسافات البيضاء $trimmed = trim($sentence); echo "<p>مُنظف: '$trimmed'</p>"; // عد الكلمات $wordCount = str_word_count($trimmed); echo "<p>عدد الكلمات: $wordCount</p>"; // استبدال PHP بـ PHP 8 $replaced = str_replace("PHP", "PHP 8", $trimmed); echo "<p>مُستبدل: $replaced</p>"; // استخراج أول 20 حرفاً $excerpt = mb_substr($replaced, 0, 20); echo "<p>أول 20 حرف: $excerpt...</p>"; // عرض الطول echo "<p>الطول: " . mb_strlen($replaced) . " حرف</p>"; ?>

الملخص

في هذا الدرس، تعلمت:

  • إنشاء النصوص باستخدام علامات الاقتباس المفردة والمزدوجة و heredoc و nowdoc
  • استخدام strlen() و mb_strlen() للحصول على طول النص
  • تحويل الحالة باستخدام strtolower() و strtoupper() و ucfirst() و ucwords()
  • إزالة المسافات البيضاء باستخدام trim() و ltrim() و rtrim()
  • البحث في النصوص باستخدام strpos() و stripos() و str_contains()
  • استخراج نصوص فرعية باستخدام substr()
  • استبدال النص باستخدام str_replace() و str_ireplace()
  • التقسيم والدمج باستخدام explode() و implode()
  • تنسيق النصوص باستخدام sprintf() و printf()
  • التعامل مع HTML بأمان باستخدام htmlspecialchars()
  • استخدام دوال متعددة البايتات للأحرف الدولية
تقدم رائع! لقد أكملت الوحدة 1: أساسيات PHP وإعداد البيئة. أنت الآن تفهم صياغة PHP والمتغيرات والعوامل والنصوص. بعد ذلك، سنتعمق في هياكل التحكم مثل if-else والحلقات والدوال!

ES
Edrees Salih
منذ 12 ساعة

We are still cooking the magic in the way!