Question

Quelqu'un peut-il m'aider à décoder pourquoi cela ne fonctionne pas?

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

Essayer de supprimer les guillemets simples de certains fichiers HTML ...

Merci! H

EDIT C’est la fonction complète. Il est conçu pour reconstruire le menu Drupal à l’aide d’images. Il applique des classes CSS à chaque élément, ce qui vous permet de sélectionner l’image de votre choix. Vous devez supprimer les espaces et les apostrophes, sinon le sélecteur CSS échouera.

Le titre de l'élément de menu à l'origine de tout ce problème est:

What's new

Assez anodin on pourrait le penser. (Sauf pour ce single ')

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 la saga continue ...

J'ai remarqué l'erreur suivante dans PHPMYADMIN:

  

L’extension PHP mbstring n’était pas   trouvé et vous semblez utiliser un   jeu de caractères multi-octets. Sans le   L'extension mbstring phpMyAdmin est   incapable de scinder les chaînes correctement et   il peut en résulter des résultats inattendus.

Je me demande si cela a quelque chose à voir avec cela?

Dans tous les cas, le code SQL est:

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

Et ceci s'affiche dans FireBug une fois qu'il a été rendu sous la forme:

<li id="What's_New">

J'ai créé un élément de menu appelé "What @ s New". et str_replace () marchera très bien, alors TOUT est à propos de cette apostrophe. Je pense que je suis d'accord, l'expression fonctionne, mais il doit s'agir d'un problème d'encodage. C’est vraiment une apostrophe convenable, courante et non l’une des variantes, mais pour une raison quelconque, PHP est absolument incapable de la reconnaître en tant que telle.

EDIT oh mon dieu mon dieu - c'est encore Drupal ... Il apparaît que la fonction l () qui formate tous les liens est complètement insensible à la réécriture de sa sortie?! Quoi qu’il en soit, ce code fonctionne ...

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 heures plus tard, je peux continuer à thématiser ce site ...

Merci beaucoup pour toutes vos suggestions, je vais pointer les auteurs d'extraits drupal sur ce post afin que d'autres personnes puissent en bénéficier également.

Était-ce utile?

La solution

Le

remplacement d’image CSS est un moyen beaucoup plus courant de remplacer un élément de menu:

Première installation: module Attributs de menu pour pouvoir définir les identifiants css de chaque élément de menu. (ces attributs peuvent être définis à partir de la page d'édition d'élément de menu du panneau d'administration)

Utilisez ensuite le remplacement d’image css. Voici est un bon tutoriel pour cela.

Et voici la méthode que j'utilise pour mes sites:

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

Ceci est un exemple de remplacement par une image de 90 x 41px

Et pour le remplacement de l'apostrophe:

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

Autres conseils

échapper à la citation simple.

Votre code est correct. Mais pourquoi ne pas utiliser str_replace lorsque vous remplacez un correctif chaîne?

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

Si str_replace ("", "") ne fonctionne pas, êtes-vous sûr que les caractères que vous souhaitez supprimer sont bien des apostrophes normales (') au lieu d'alternatives étranges ( '), ou des marques d’accentuation bizarres ('), des guillemets simples ('') ou quoi encore?

Ou peut-être que la valeur de $ cssid est remplacée par un autre bogue d'origine?

Peut-être que vous cherchez une sortie erronée pour obtenir des résultats?

Ou, par hasard, exécutez-vous accidentellement une copie du code différente de celle que vous modifiez - en fait, c'est vraiment embêtant quand cela se produit! :)

Étant donné que c'est du HTML, avez-vous pensé qu'il pourrait être représenté par & 39 plutôt que '?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top