2014-04-16 43 views
0

正如標題所述。如何在具有2個不同URL的相同元素上使用class =「selected」

我有這樣一段代碼:

(strpos(htmlspecialchars($_SERVER['REQUEST_URI']), 'forum')) ? 'class="selected' : ''; 

現在,這個碼具有如果URL是mysite.com/forum選擇的元素。但是,如果URL是mysite.com/thread,我也想選擇相同的元素。

我曾嘗試:

(strpos(htmlspecialchars($_SERVER['REQUEST_URI']), 'forum' || 'thread')) ? 'class="selected' : ''; 

但隨後沒有工作,我沒有得到任何錯誤消息。我究竟做錯了什麼?

+0

您的語法錯誤。看到我的答案是正確的 –

回答

0

您可以使用此;

$contextPath = htmlspecialchars($_SERVER['REQUEST_URI']); 

(strpos($contextPath, 'forum') || strpos(contextPath, 'thread')) ? 'class="selected' : ''; 
1

表達'forum' || 'thread'的計算結果爲true因爲非空字符串是truthy。

所以你充分表達變爲:

strpos(htmlspecialchars($_SERVER['REQUEST_URI']), true) 

這有可能是因爲strpos想要一個字符串true將轉換爲一個字符串。它更改爲:

strpos(htmlspecialchars($_SERVER['REQUEST_URI']), "1") 

你要找的表達是:

strpos(htmlspecialchars($_SERVER['REQUEST_URI']), "forum") || strpos(htmlspecialchars($_SERVER['REQUEST_URI']), "thread") 

這能夠進一步提高:這裏不需要htmlspecialcharsstrpos可以返回0(這是falsy),所以:

strpos($_SERVER['REQUEST_URI'], "forum") !== false || strpos($_SERVER['REQUEST_URI'], "thread") !== false 
+0

我很好奇你的建議是「你應該用'strstr'來代替」,當[文檔爲strstr](http://us3.php.net/manual/en/function。 strstr.php)說:「如果你只想確定在乾草堆內是否發生特定針,請使用更快,更少的內存密集型功能strpos()」。國際海事組織,建議應該使用'strpos($ _ SERVER ['REQUEST_URI'],「論壇」)!== FALSE',但我很想知道你的推理。 –

+0

@PatrickQ謝謝,我知道這件事,但我認爲這是另一回事。相反,爲'strpos'添加了一條註釋,返回'0'。我猜'strstr'也有這個問題。 – Halcyon

0

試試這個:

<?php if (preg_match('#^/(forum|thread)#', $_SERVER['REQUEST_URI'])) echo 'class="selected"'; ?> 
+0

這裏假定URL看起來像'/ forum/etc'。它不會匹配'/ path/to/forum.php' – Halcyon

+0

這個問題的網址是'mysite.com/forum'和'mysite.com/thread' – eXi

+0

這也不符合你的正則表達式。證明:https://www.debuggex.com/r/YjBNHdwNCYnxVEc6 – Halcyon

相關問題