任何人都可以幫我解碼爲什麼這不起作用?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代碼片段作者希望其他人也能從中受益。
所以'$ 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