كيفية تشفير النصوص خارج العلامة
  مع htmlentistities ()؟ (بي أتش بي)		

StackOverflow https://stackoverflow.com/questions/1278491

  •  16-09-2019
  •  | 
  •  

سؤال

أحاول أن أجعل محلل BBCode الخاص بي لموقع الويب الخاص بي وأنا أبحث عن طريقة إلى "htmlentities ()" باستثناء الرموز داخل العلامات المسبقة، والعلامة المسبقة نفسها.

علي سبيل المثال:

u003Cb>مرحبا العالمu003C/b> (المخرجات <b> مرحبا العالم <>)u003Cpre style=";text-align:right;direction:rtl"> "يجب عدم تحويل هذا إلى كيانات HTML"u003C/pre> (المخرجاتu003Cpre style=";text-align:right;direction:rtl"> "يجب عدم تحويل هذا إلى كيانات HTML"u003C/pre> في

ليس لدي أي فكرة عن كيفية القيام بذلك.

إن أي نوع من المساعدة موضع تقدير :)

شكرًا.

هل كانت مفيدة؟

المحلول

يمكنك تحويل &lt;pre&gt; … &lt;/pre&gt; ارجع الى <pre> … </pre>:

// convert anything
$str = htmlspecialchars($str);
// convert <pre> back
$str = preg_replace('/&lt;pre&gt;((?:[^&]+|&(?!lt;\\/pre&gt;))*)&lt;\\/pre&gt;/s', '<pre>$1</pre>', $str);

نصائح أخرى

إذا كان ذلك لممارسة، حسنا. ولكن إذا كان الأمر فقط للحصول على الميزة، فلا إعادة اختراع العجلة. التحليل ليس مهمة سهلة، وهناك الكثير من المحللين الناضجين هناك. بالطبع، أود أن أنظر إلى حزم الكمثرى أولا. محاولة html_bbcodeperser..

إذا كنت تريد حقا أن تفعل ذلك بنفسك، فاحظت بطريقتين:

  • regexp.
  • آلات الدولة

عادة مزيج من كلاهما مفيد. ولكن نظرا لأن العلامات يمكن تداخلها وتشكيلها بشكل سيئ، فهي حقا أشياء صعبة لرمز. على الأقل، استخدم رمز محلل عام وتحديد الحقول المعجمية لك، من نقطة الصفر سيستغرق كل الوقت الذي تستخدمه لرمز موقع الويب.

راجع للشغل: استخدام BBParser لا يحررك من تعقيم إدخال المستخدم ...

تحرير: أنا في مزاج جيد اليوم، لذلك هنا هو مقتطف حول كيفية استخدام HTML_BBCODEPARSER:

// if you don't know how to use pear, you'd better learn that quick
// set the path so pear is in it
ini_set("include_path", ini_get("include_path").":/usr/share/pear");
// include PEAR and the parser
require_once("PEAR.php");
require_once("HTML/BBCodeParser.php");

// you can tweak settings from a ini fil
$config = parse_ini_file("BBCodeParser.ini", true);
$options = &PEAR::getStaticProperty("HTML_BBCodeParser", "_options");
$options = $config["HTML_BBCodeParser"];

// here start the parsing
$parser = new HTML_BBCodeParser();
$parser->setText($the_mighty_BBCode);
$parser->parse();
$parsed = $parser->getParsed();

// don't forget to clean that
echo htmlspecialchars(striptags($parsed));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top