Frage

Kann mir jemand helfen entschlüsseln, warum dies nicht funktioniert?

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

Der Versuch, die einfachen Anführungszeichen von einem html ...

abzustreifen

Danke! H

EDIT Dies ist die volle Funktion - es ist so konzipiert, das Drupal-Menü Bilder neu zu erstellen, und es gilt CSS-Klassen jedes Element, so dass Sie das Bild, das Sie mögen. muss Strippen Räume und Apostrophe getan werden oder der CSS-Selektor nicht.

Der Titel des Menüpunktes all dieses Problem verursacht, ist:

What's new

Pretty harmlos würde man denken. (Mit Ausnahme dieses einzigen ‚)

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

EDIT die Saga geht weiter ...

Ich merke, dass ich die folgenden Fehler in PHPMYADMIN erhalten:

  

Die mbstring PHP-Erweiterung war nicht   gefunden und Sie scheinen ein zu verwenden   multibyte charset. Ohne das   phpMyAdmin mbstring Erweiterung   nicht in der Lage Strings korrekt zu spalten und   es kann zu unerwarteten Ergebnissen führen.

Ich frage mich, ob dies etwas damit zu tun hat?

In jedem Fall ist die die SQL-Code ist:

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

Und diese zeigt in FireBug, sobald es als wiedergegeben:

<li id="What's_New">

Ich habe einen Menüpunkt erstellt namens „Was @ s New“ und die str_replace () auf dieser gut funktionieren werden, so ist es alles über diese goddam Apostroph. Ich glaube, ich stimme zu, der Ausdruck funktioniert, aber es hat eine Codierung Problem. Es ist wirklich eine richtige, gemeinsame, Apostroph und nicht eine der Varianten, aber aus irgendeinem Grunde PHP ist absolut unfähig, es als solches zu erkennen.

EDIT oh Gott oh Gott - es ist wieder Drupal ... Es scheint, dass die Funktion l (), die alle Links formatiert vollständig undurchlässig ist es Ausgang neu geschrieben haben ?! Wie auch immer, dieser Code funktioniert ...

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 Stunden später, und ich kann auf Thematisierung dieser Website tragen ...

Vielen Dank für Ihre Anregungen, ich werde die Drupal-Schnipsel Autoren auf diesem Posten Punkt so hoffentlich andere Menschen auch davon profitieren wird.

War es hilfreich?

Lösung

CSS-Bildersetzung ist eine viel häufiger gewählte Art und Weise für den Menüpunkt zu ersetzen:

Installieren Sie zuerst: Menü Modul Attribute für jeden Menüpunkt assing CSS-IDs zu können. (Diese Attribute können aus dem Menüpunkt Edit-Seite auf Admin-Panel eingestellt werden)

Dann CSS Image Replacement verwenden. Hier ist ein gutes Tutorial für diese.

Und das ist die Methode, die ich für meine Websites verwenden:

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

Dies ist ein Beispiel für den Austausch mit einem Bild von 90 x 41px

Und für den Apostroph Ersatz:

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

Andere Tipps

Flucht der Apostroph.

Der Code sieht gut aus. Aber warum Sie nicht verwenden str_replace wie Sie eine feste Schnur zu ersetzen?

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

Wenn str_replace("'","") nicht funktioniert, sind Sie sicher, dass Sie die Zeichen wollen, sind in der Tat normale Apostrophe entfernen ( ‚) anstelle von seltsamen Alternativen (‘), oder einige seltsame Akzentzeichen ('`˙ ̛̉) oder einfache Anführungszeichen ( '') oder Dingsbums?

Oder vielleicht der Wert $cssid wird durch einen anderen Fehler zu Original ersetzt zurück?

Vielleicht sind Sie an dem falschen Ausgang für Ergebnisse suchen?

oder durch eine weit Chance, werden Sie aus Versehen eine andere Kopie des Codes als die, die Sie bearbeiten laufen - btw, das ist wirklich ärgerlich, wenn es passiert! :)

Da ist es HTML haben Sie darüber nachgedacht, dass es als & # dargestellt werden können 39 statt ‚?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top