Pregunta

¿Alguien puede ayudarme a decodificar por qué esto no funciona?

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

Intentando quitar las comillas simples de algunos html ...

Gracias! H

EDITAR Esta es la función completa: está diseñada para reconstruir el menú de Drupal utilizando imágenes, y aplica clases CSS a cada elemento, lo que le permite seleccionar la imagen que desee. Se deben eliminar los espacios y las apóstrofes o el selector de CSS falla.

El título del elemento del menú que causa todo este problema es:

What's new

Bastante inocuo que pensarías. (Excepto por ese 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;
}

EDITAR la saga continúa ...

Noto que recibo el siguiente error en PHPMYADMIN:

  

La extensión de PHP mbstring no era   encontrado y parece que estás usando un   juego de caracteres multibyte. Sin el   La extensión mbstring phpMyAdmin es   incapaz de dividir las cadenas correctamente y   puede dar lugar a resultados inesperados.

Me pregunto si esto tiene algo que ver con eso.

En cualquier caso, el código SQL es:

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

Y esto se muestra en FireBug una vez que se ha procesado como:

<li id="What's_New">

He creado un elemento de menú llamado " What @ s New " y el str_replace () trabajará en eso muy bien, así que es TODO sobre este maldito apóstrofe. Creo que estoy de acuerdo, la expresión funciona, pero tiene que ser un problema de codificación. Realmente es un apóstrofe apropiado, común y no una de las variantes, pero por alguna razón PHP es absolutamente incapaz de reconocerlo como tal.

EDITAR oh dios oh dios - es Drupal otra vez ... ¡Parece que la función l () que formatea todos los enlaces es completamente insensible a que se reescriba su salida? En cualquier caso, este código funciona ...

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 horas más tarde y puedo continuar con este sitio ...

Muchas gracias por todas sus sugerencias, voy a señalar a los autores de fragmentos de drupal en esta publicación, así que espero que otras personas también se beneficien de ella.

¿Fue útil?

Solución

Reemplazo de imagen CSS es una forma mucho más comúnmente elegida para reemplazar elementos de menú:

Primero instale: Módulo de atributos del menú para poder verificar los ID de css para cada elemento del menú. (estos atributos se pueden configurar desde la página de edición de elementos del menú en el panel de administración)

Luego use el reemplazo de imagen css. Aquí es un buen tutorial para esto.

Y este es el método que utilizo para mis sitios:

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

Este es un ejemplo de reemplazo con una imagen de 90 x 41 px

Y para el reemplazo de apóstrofes:

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

Otros consejos

escapar de la comilla simple.

Tu código se ve bien. Pero, ¿por qué no usa str_replace como usted & # 8217; ¿Está reemplazando una cadena fija?

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

Si str_replace (" '", " ") no funciona, ¿está seguro de que los caracteres que desea eliminar son apóstrofes normales (') en lugar de alternativas extrañas ( '), o algunos acentos extraños (´'? ????) o comillas simples (' ') o no?

¿O tal vez el valor de $ cssid se remplace al original por algún otro error?

¿Tal vez estás viendo el resultado equivocado para obtener resultados?

O, por casualidad, ¿está ejecutando accidentalmente una copia del código diferente a la que está editando? por cierto, ¡es realmente molesto cuando sucede! :)

Dado que es HTML, ¿ha considerado que puede representarse como & amp; # 39 en lugar de '?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top