preg_replace()str_replace()撇号噩梦! - Drupal的菜单图像替换
任何人都可以帮我解码为什么这不起作用?preg_replace()str_replace()撇号噩梦! - Drupal的菜单图像替换
$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',
这显示在Firebug一旦它被呈现为:
<li id="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能够assing CSS ID对每个菜单项。 (这些属性可以从管理面板上的菜单项编辑页面设置)
然后使用css图像替换。 Here是一个很好的教程。
这是我用我的网站的方法:
#primary-tv
{
display: block;
width: 90px;
height: 0px;
padding-top: 41px;
background: url(images/nghtv.png);
}
这是一个为置换的90×41px
图像和省略号替代:
$cssid = preg_replace("'","",htmlspecialchars($cssid, ENT_QUOTES));
你知道,我愿意Drupal.org会有这样的东西只是布局。它是最好的,但相反的WORST记录CMS的我用过:(谢谢你的提示,但看起来不错! – MrFidge 2009-09-11 09:11:51
这很好用! – MrFidge 2009-09-11 09:54:44
文档是一项艰苦的工作,drupal.org有太多的内容,因此很难记录所有内容,我也听说过关于Lullabot播客的一些关于文档问题的工作,我相信我们找不到解决我们的每一个问题,但新的Drupal搜索由Apache Solr和问题系统提供支持。(我也主要使用“谷歌搜索”与网站:drupal.org参数为我的Drupal查询:)) – 2009-09-11 14:48:07
如果str_replace("'","")
不工作,你确定要删除的人物的确是正常的单引号(“),而不是怪异的替代品(”),或一些奇怪的重音符号('`˙̛̉)或单引号('')还是什么?
或者$cssid
的值可能被其他错误替换回原来的值?
也许你正在看结果的错误输出?
或者很有可能,你是否意外地运行了一个不同于你正在编辑的代码副本 - 顺便说一句,当它发生时真的很烦人! :)
哈哈耶对我来说也是如此 - 只要我能够看到它确实是一个普通的旧撇号而没有其他替代品,cssid也是一个完全可变的变量,所以它不会被取代这里。是的,这段代码已经正确地发布了:D – MrFidge 2009-09-10 12:02:34
为了确保它是正确的字符,你可以尝试使用'file_put_contents('debug.txt',$ cssid)'并且将debug.txt中的字符复制到你的代码中,参见如果这样的话...... – 2009-09-10 12:08:50
或者,ehm,更容易的检查是在替换之前强制执行'$ cssid =“What's new”',并检查它是否工作......(它会影响每个列表项,当然,但对于调试它并不重要。) – 2009-09-10 12:10:42
所以'$ link'包含'What's new',对吧?你确定它是一个'''(U + 0027),而不是像'\''(U + 0060),'''(U + 00B4),''(U + 2018),''' (U + 2019)还是'''(U + 201B)? – Gumbo 2009-09-10 11:55:24
是的,我输入并重新输入它。我可能会进入数据库,看看字符编码是不是搞砸了。 – MrFidge 2009-09-10 12:00:14
像Gumbo说的,你确定它是一个'...你应该测试你的功能,而不是与实时数据(很容易出错!),但首先自制数据;你知道哪些会起作用。如果可行,请在您的实时数据上触发它。看看会发生什么。 – Jake 2009-09-10 12:01:15