ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – preg_replace()str_replace()撇号噩梦! – Drupal菜单图像替换

2019-07-30 17:31:01  阅读:272  来源: 互联网

标签:php drupal preg-replace drupal-6


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

$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中收到以下错误:

The mbstring PHP extension was not
found and you seem to be using a
multibyte charset. Without the
mbstring extension phpMyAdmin is
unable to split strings correctly and
it may result in unexpected results.

我想知道这是否与它有关?

在任何情况下,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图像替换是更常用的菜单项替换方式:

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

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

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

    #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));

标签:php,drupal,preg-replace,drupal-6
来源: https://codeday.me/bug/20190730/1584205.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有