任何人都可以帮我解码为什么这不起作用?

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

尝试从某些HTML中剥离单引号......

谢谢! ħ

EDIT 这是完整的功能 - 它旨在使用图像重建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扩展不是   发现你似乎正在使用   多字节字符集。没有   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绝对无法识别它。

编辑哦天哪哦天啊 - 再次是Drupal ...... 似乎格式化所有链接的函数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;
}

2小时后,我可以继续播放这个网站...

非常感谢你提出的所有建议,我将在这篇文章中指出drupal片段的作者,所以希望其他人也能从中受益。

有帮助吗?

解决方案

CSS图像替换是更换菜单项的更常用方法:

首先安装:菜单属性模块,以便能够为每个菜单项确定css id。 (可以从管理面板上的菜单项编辑页面设置这些属性)

然后使用css图像替换。 此处是一个很好的教程。

这是我用于我网站的方法:

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

这是替换图像为90 x 41px

的示例

对于替换撇号:

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

其他提示

逃避单引号。

您的代码看起来很好。但是,为什么不使用 str_replace 作为你&#8217;重新替换固定的字符串?

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

如果 str_replace(&quot;'&quot;,&quot;&quot;)不起作用,您确定要删除的字符确实是正常的撇号(')而不是奇怪的替代品( &#8217;),或一些奇怪的重音符号(&#180;`&#729;&#777;&#795;&#8190;&#8127;)或单引号(&#8216;&#8217; )或诸如此类的东西?

或者 $ cssid 的值可能会被其他一些bug替换回原来的颜色?

也许你正在查看错误的输出结果?

或者很有可能,你是不是意外地运行了一个不同于你正在编辑的代码副本 - 顺便说一下,当它发生时真的很烦人! :)

鉴于它是HTML,您认为它可以表示为&amp;#39而不是'?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top