mappoMedlem sedan apr. 2001664 inlägg Nu har jag äntligen fått tummen ur och skrivit den multiSearch jag så länge saknat.
Jag bifogar den här och ber er mer rutinerade webbprogrammerare om input.
Är det en bra lösning? Vad kan förbättras? Är det tillräcklig felhantering?
Först index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>multisearch</title>
<script language="JavaScript" type="text/javascript">
window.onload = function()
{
document.multiSearchForm.multi.focus() ;
document.multiSearchForm.multi.reset() ;
}
</script>
</head>
<body>
<h3>multiSearch</h3>
<form action="go.php" method="post" target="_blank" name="multiSearchForm">
<input type="text" name="multi">
<br>
Sökningen öppnas i ett nytt fönster.
</form>
<h4>Instruktioner:</h4>
<table>
<tr>
<td width="350" align="justify">
En multiSökning görs genom att skriva ett nyckeltecken före själva söktermen.
Mellan nyckeln och söktermen ska det vara ett mellanslag.
<br><br>
<u>Nycklar:</u>
<ul>
<li><tt>i - </tt>IMDb</li>
<li><tt>d - </tt>Dictionary</li>
<li><tt>t - </tt>tyda.se</li>
<li><tt>e - </tt>engelska Wikipedia</li>
<li><tt>s - </tt>svenska Wikipedia</li>
<li><tt>g - </tt>Google</li>
</ul>
Nyckeln "<tt>g</tt>" är nödvändig för att kunna skicka en sökterm som börjar på en giltig nyckel till Google, t.ex. "<tt>I think, thereore I am</tt>".
<br><br>
<u>Undantag:</u>
<ol>
<li>Teckan 1 är inget av ovanstående.</li>
<li>Tecken 2 är inte ett mellanslag.</li>
<li>Söktermen består av färre än tre tecken.</li>
</ol>
Alla dessa skickar hela söktermen till Google.
</td>
</tr>
</table>
</body>
</html>
Och sedan go.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="REFRESH" content="0;url=<?php multiSearch($_POST["multi"]) ; ?>">
</head>
</html>
<?php
function multiSearch($multi)
{
$url = "http://" ;
if ( ((strLen($multi) > 2) && subStr($multi , 1 , 1) == " ") )
{
$key = subStr($multi , 0 , 1) ;
$string = subStr($multi , 2 , strLen($multi)) ;
switch ($key)
{
case "i":
$url .= "imdb.com/find?" . $string ;
break ;
case "d":
$url .= "dictionary.reference.com/search/?q=" . $string ;
break ;
case "t":
$url .= "tyda.se/search?w=" . $string ;
break ;
case "e":
$url .= "en.wikipedia.org/wiki/Special:Search?search=" . $string ;
break ;
case "s":
$url .= "sv.wikipedia.org/wiki/Special:Search?search=" . $string ;
break ;
case "g":
$url .= "google.com/search?q=" . $string ;
break ;
default:
$url .= "google.com/search?q=" . $multi ;
break ;
}
}
else
{
$url .= "google.com/search?q=" . $multi ;
}
echo $url ;
}
?>
mappoMedlem sedan apr. 2001664 inlägg Jag insåg precis att exemplet "I think, therefore I am" inte var helt lyckat
eftersom switch skiljer på versaler och gemener. :r
Jag lagt till en notis om att nycklarna är gemener bland instruktionerna och
ändrat exemplet till "i think, therefore i am". :)
mappoMedlem sedan apr. 2001664 inlägg Det blev även nödvändigt med en lTrim() på $string
Däremot behövdes ingen rTrim() eftersom alla sex söktjänster ignorerar "eftersläpande" blanktecken.
mappoMedlem sedan apr. 2001664 inlägg Stort problem: Den klarar inte av sökningar med citattecken.
Om jag i fönstret skriver:
g "Bruce Wayne"
skickar den endast en back-slash till Google...
mappoMedlem sedan apr. 2001664 inlägg Nu tror jag att jag fått ordning på allt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>multiSearch</title>
<script language="JavaScript" type="text/javascript">
window.onload = function()
{
document.multiSearchForm.multi.focus() ;
document.multiSearchForm.multi.reset() ;
}
</script>
</head>
<body>
<h2>multiSearch</h2>
<form action="go.php" method="post" target="_blank" name="multiSearchForm">
<input type="text" name="multi" size="31">
<br>
Sökningen öppnas i ett nytt fönster.
</form>
<h3>Instruktioner:</h3>
<table>
<tr>
<td width="440" align="justify">
En multiSökning görs genom att skriva ett nyckeltecken före själva söktermen. Mellan nyckeln och söktermen ska det vara ett mellanslag.
<h4>Nycklar:</h4>
<ul>
<li><tt>i - </tt>IMDb</li>
<li><tt>d - </tt>Dictionary</li>
<li><tt>t - </tt>tyda.se</li>
<li><tt>e - </tt>engelska Wikipedia</li>
<li><tt>s - </tt>svenska Wikipedia</li>
<li><tt>g - </tt>Google</li>
</ul>
Observera att samtliga nycklar är gemener. Nyckeln <b>g</b> är nödvändig för att kunna skicka en sökterm som börjar på en giltig nyckel till Google, t.ex. <i>i think, thereore i am</i>.
<h4>Undantag</h4>
Om minst ett av följande villkor är uppfyllt, skickas hela söksträngen till Google.
<ol>
<li>Tecken 1 är ingen av ovanstående nycklar.</li>
<li>Tecken 2 är inte ett mellanslag.</li>
<li>Söktermen består av färre än tre tecken.</li>
</ol>
</td>
</tr>
</table>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="REFRESH" content="0 ; url=<?php multiSearch($_POST["multi"]) ; ?>">
</head>
<body>
Sökning pågår...
</body>
</html>
<?php
/*
Söksträngen tas in via formuläret i index.html och skickas via POST till go.php och tas emot i php-taggen i html-koden ovan.
Där används den som argument till funktionen nedan som skriver ut en URL på php-taggens ställe.
*/
function multiSearch($multi)
{
$multi = trim($multi) ; // Tar bort inledande och "eftersläpande" mellanslag
$multi = str_replace(chr(92) , "" , $multi) ; // Tar bort back-slash
$multi = str_replace(chr(34) , "%22" , $multi) ; // Byter ut citattecken mot %22
$url = "http://" ; // initierar URL till söktjänst
if ( ((strLen($multi) > 2) && subStr($multi , 1 , 1) == " ") )
// IF-satsen är sann om undantag 2 _och_ 3 är falska:
{
$key = subStr($multi , 0 , 1) ; // Plocka ut första tecknet som KEY...
$string = lTrim(subStr($multi , 2 , strLen($multi))) ; // ...och låt resten vara STRING
// lTrim tar bort eventuella extra mellanslag mellan nyckeln och söksträngen så att STRING inte inleds med mellanslag.
// Nu granskas nycklarna (KEY) och URL utökas i enlighet med associerad söktjänst:
switch ($key)
{
case "i":
$url .= "imdb.com/find?" . $string ;
break ;
case "d":
$url .= "dictionary.reference.com/search/?q=" . $string ;
break ;
case "t":
$url .= "tyda.se/search?w=" . $string ;
break ;
case "e":
$url .= "en.wikipedia.org/wiki/Special:Search?search=" . $string ;
break ;
case "s":
$url .= "sv.wikipedia.org/wiki/Special:Search?search=" . $string ;
break ;
case "g":
$url .= "google.com/search?q=" . $string ;
break ;
default:
// Default-fallet hanterar undantag 1.
$url .= "google.com/search?q=" . $multi ;
break ;
}
}
else
// ELSE är sann om undantag 2 _eller_ 3 är uppfyllda:
{
$url .= "google.com/search?q=" . $multi ;
}
echo $url ;
// Spotta ut sökvägen till html-sidan överst i denna fil.
}
?>