3

谁能帮我解码为什么这不起作用?

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

试图从一些html中去除单引号......

谢谢!H

编辑这是完整的功能 - 它旨在使用图像重建 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',

一旦它被渲染为:

<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 片段的作者,希望其他人也能从中受益。

4

5 回答 5

2

转义单引号。

于 2009-09-10T11:33:01.583 回答
2

CSS 图像替换是一种更常用的菜单项替换方式:

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

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

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

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

这是替换为 90 x 41 像素图像的示例

对于撇号替换:

$cssid = preg_replace("&#039;","",htmlspecialchars($cssid, ENT_QUOTES));
于 2009-09-10T19:48:46.727 回答
1

你的代码看起来不错。但是为什么不使用str_replace替换固定字符串呢?

$cssid = str_replace("'", "", $cssid);
于 2009-09-10T11:25:32.943 回答
1

如果str_replace("'","")不起作用,您确定要删除的字符确实是正常的撇号 (') 而不是奇怪的替代品 ('),还是一些奇怪的重音符号 (´`˙ ̛̉῾᾿) 或单引号 ('')还是什么?

或者,值可能$cssid被其他错误替换回原来的值?

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

或者很可能,您是否不小心运行了与您正在编辑的代码不同的代码副本 - 顺便说一句,当它发生时真的很烦人!:)

于 2009-09-10T11:52:44.970 回答
1

鉴于它是 HTML,您是否认为它可以表示为 ' 而不是 '?

于 2009-09-10T12:04:15.957 回答