【发布时间】:2009-09-10 11:23:39
【问题描述】:
谁能帮我解读一下为什么这不起作用?
$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">
我创建了一个名为“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 sn-p 作者,希望其他人也能从中受益。
【问题讨论】:
-
所以
$link包含What's new,对吗?你确定它是'(U+0027) 而不是类似`(U+0060),´(U+00B4),‘(U+2018),’( U+2019) 或‛(U+201B)? -
是的,我已经输入并重新输入了它。我可能会进入数据库,看看字符编码是否以某种方式搞砸了。
-
就像 Gumbo 说的那样,你确定它是一个 ' ...你应该测试你的函数,而不是使用实时数据(非常容易出错!),而是首先使用自制数据;你知道这会起作用。如果可行,请在您的实时数据上启动它。看看会发生什么。
-
该代码对我有用...
$cssid得到一个值Whats_new。 -
我打赌某种编码问题。这个字符将不是撇号——啊,每次我使用它时,我都必须使用剪切和粘贴来使这个词正确! :)
标签: php drupal drupal-6 preg-replace