preg_replace () str_replace () kesme imi kabus!

5 Cevap php

Herkes bu işe yaramazsa bana neden çözmek yardımcı olabilir misiniz?

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

Bazı html gelen tek tırnak işaretleri şerit çalışılıyor ...

Thanks! H

EDIT This is the full function - it's designed to rebuild the Drupal menu using images, and it applies CSS classes to each item, allowing you to select the image you want. Stripping out spaces and apostrophes needs to be done or the CSS selector fails.

Bütün bu soruna neden menü öğesi başlığı:

What's new

Sandığın oldukça zararsız. ('Bu single hariç)

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;
}

Destan devam DÜZENLE ...

Ben phpmyadmin aşağıdaki hatayı olsun fark:

The mbstring PHP extension was not found and you seem to be using a multibyte charset. Without the mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.

Ben bu onunla bir ilgisi var mı acaba?

Her durumda SQL kodu:

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

O kadar işlenmiş Ve bir kez bu Kundakçı görüntüler:

<li id="What's_New">

Ben "Yeni Neler @ s" adlı bir menü öğesi oluşturduk ve str_replace () bu sadece iyi çalışır, bu yüzden bu lanet kesme işareti ile ilgili TÜM bulunuyor. Ben ifade çalışır katılıyorum düşünüyorum, ama bir kodlama sorun vardır. Bu gerçekten uygun, ortak, kesme değil çeşitlerinden biridir, ama nedense PHP gibi tanımak için kesinlikle mümkün değildir.

EDIT oh god oh god - it's Drupal again... It appears that the function l() which formats all the links is completely impervious to having it's output rewritten?! Whatever the case, this code works...

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;
}

2 saat sonra ve ben bu siteyi theming devam edebilirsiniz ...

Tüm önerileriniz için çok teşekkür ederim, ben bu kadar umarım diğer insanlar da bundan yararlanacaktır bu görevde drupal pasajı yazarları işaret gidiyorum.

5 Cevap

CSS image replacement menü öğesi değiştirilmesi için çok daha sık seçilen bir yoldur:

İlk yükleyin: Menu Attributes module her menü öğesi için css id assing mümkün. (Bu nitelikler yönetim paneline menü öğesi düzenleme sayfasında ayarlanabilir)

Sonra css görüntü değiştirme kullanmak. Here Bu iyi bir öğretici olduğunu.

Ve bu benim siteler için kullanın yöntemdir:

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

Bu 90 x 41px bir görüntü ile değiştirilmesi için bir örnek

Ve kesme değiştirilmesi için:

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

tek tırnak kaçış.

Sizin kod gayet iyi görünüyor. Eğer sabit bir dize yerine konum olarak ama neden str_replace kullanmak değil mi?

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

str_replace("'","") işe yaramazsa, sen (), ya da bazı garip aksan işaretleri ('`˙ ̛̉) yerine garip alternatifler kaldırmak istediğiniz karakterleri (') aslında normal bir kesme işareti vardır eminiz veya tek tırnak ('') ya da etajer?

Ya da belki değeri $cssid diğer bazı böcek tarafından geri orijinal yerini alır?

Belki sonuçlar için yanlış çıkış bakıyorsun?

Ya da uzak bir ihtimal, yanlışlıkla düzenlediğiniz bir daha farklı bir kod kopyasını çalıştıran - o olur btw, bu gerçekten sinir bozucu! :)

HTML bunu gibi & # 39 yerine 'temsil edilebilir olduğunu kabul olduğu göz önüne alındığında?