preg_replace () str_replace () Apostrope Nightmare! - صورة قائمة دروبال استبدال

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

سؤال

هل يمكن لأي شخص مساعدتي في فك تشفير لماذا هذا لا يعمل؟

$cssid = preg_replace("/'/", "", $cssid);

تحاول تجريد علامات الاقتباس الفردي من بعض HTML ...

شكرًا! ح

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

عنوان عنصر القائمة الذي يسبب كل هذه المشكلة هو:

What's new

لا تظن. (باستثناء تلك الأغنية)

function primary_links_add_icons() {
  $links = menu_primary_links();
  $level_tmp = explode('-', key($links));
  $level = $level_tmp[0];
  $output = "<ul class=\"links-$level\">\n";   
  if ($links) {
    foreach ($links as $link) {
        $link = l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']);
        $cssid = str_replace(' ', '_', strip_tags($link));
        $cssid = str_replace('\'', '', $cssid);
        /*$link = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $link);*/
        $output .= '<li id="'.$cssid.'">' . $link .'</li>';
    };
    $output .= '</ul>';
  }
  return $output;
}

تحرير الملحمة يستمر ...

لاحظت أنني أحصل على الخطأ التالي في phpmyadmin:

لم يتم العثور على امتداد MBSTRING PHP ويبدو أنك تستخدم charset متعددة الفئران. بدون امتداد mbstring ، لا يستطيع phpmyadmin تقسيم السلاسل بشكل صحيح وقد يؤدي إلى نتائج غير متوقعة.

أتساءل ما إذا كان هذا له علاقة به؟

في أي حال ، فإن رمز SQL هو:

('primary-links', 951, 0, 'http://www.google.com', '', 'What''s New',

وهذا يعرض في Firebug بمجرد تقديمه على أنه:

<li id="What's_New">

لقد قمت بإنشاء عنصر قائمة يسمى "What@S New" وسيعمل Str_replace () على هذا ما يرام ، لذلك كل شيء عن هذا الفاصلة الرائعة. أعتقد أنني أوافق على أن التعبير يعمل ، لكن يجب أن يكون مشكلة تشفير. إنها حقًا عبارة عن علقًا شائعًا ، مشتركًا ، وليس أحد المتغيرات ، ولكن لسبب ما ، لا يمكن لـ PHP التعرف عليها على هذا النحو.

تحرير يا إلهي يا إلهي - إنه دروبال مرة أخرى ... يبدو أن الوظيفة l () ما هي تنسيق جميع الروابط غير محصنة تمامًا لإعادة كتابة الإخراج؟! مهما كان الأمر ، يعمل هذا الرمز ...

function primary_links_add_icons() {
  $links = menu_primary_links();
  $level_tmp = explode('-', key($links));
  $level = $level_tmp[0];
  $output = "<ul class=\"links-$level\">\n";   
  if ($links) {
    foreach ($links as $link) {
        $link['title'] = str_replace('\'', '', $link['title']);
        $link = l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']);
        $cssid = str_replace(' ', '_', strip_tags($link));      
        /*$link = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $link);*/
        $output .= '<li id="'.$cssid.'">' . $link .'</li>';
    };
    $output .= '</ul>';
  }
  return $output;
}

بعد ساعتين ويمكنني الاستمرار في هذا الموقع ...

شكرًا جزيلاً على كل اقتراحاتك ، سأقوم بتوجيه مؤلفي مقتطف Drupal في هذا المنشور ، لذلك نأمل أن يستفيد منها الآخرون أيضًا.

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

المحلول

استبدال صورة CSS هي طريقة تم اختيارها بشكل أكثر شيوعًا لاستبدال عنصر القائمة:

التثبيت الأول: وحدة سمات القائمة لتكون قادرًا على تأييد معرف CSS لكل عنصر قائمة. (يمكن تعيين هذه السمات من صفحة تحرير عنصر القائمة على لوحة المسؤول)

ثم استخدم استبدال صورة CSS. هنا هو برنامج تعليمي جيد لهذا.

وهذه هي الطريقة التي أستخدمها لمواقعي:

    #primary-tv
{
    display: block;
    width: 90px;
    height: 0px;
    padding-top: 41px;
    background: url(images/nghtv.png);
}

هذا مثال للاستبدال مع صورة 90 × 41 بكسل

وللاستبدال الفاصلة الرسولية:

$cssid = preg_replace("&#039;","",htmlspecialchars($cssid, ENT_QUOTES));

نصائح أخرى

الهروب من اقتباس واحد.

الرمز الخاص بك يبدو جيدا. ولكن لماذا لا تستخدم str_replace أثناء استبدال سلسلة ثابتة؟

$cssid = str_replace("'", "", $cssid);

إذا str_replace("'","") لا تعمل ، هل أنت متأكد من أن الأحرف التي تريد إزالتها هي بالفعل عتبات عادية (') بدلاً من بدائل غريبة (') ، أو بعض علامات اللكنة الغريبة (´`˙ ̛̉῾᾿) أو علامات اقتباس واحدة ('') أو ماذا لا؟

أو ربما قيمة $cssid يتم استبداله مرة أخرى إلى الأصل ببعض الأخطاء الأخرى؟

ربما كنت تبحث في الإخراج الخاطئ للحصول على النتائج؟

أو بفرصة بعيدة ، هل تقوم بطريق الخطأ بتشغيل نسخة مختلفة من الكود عن تلك التي تقوم بتحريرها - راجع للشغل ، وهذا أمر مزعج حقًا عندما يحدث! قون

بالنظر إلى أن HTML هل اعتبرت أنه قد يتم تمثيله على أنه "بدلاً من"؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top