webForumDet fria alternativet

min snygga multiSearch

PHPur PHP

4 svar · 581 visningar · startad av mappo

Medlem sedan apr. 2001664 inlägg
Frågan#1

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 ;
	}
?>
Medlem sedan apr. 2001664 inlägg
#2

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". :)

Medlem sedan apr. 2001664 inlägg
#3

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.

Medlem sedan apr. 2001664 inlägg
#4

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...

Medlem sedan apr. 2001664 inlägg
#5

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.
	}
?>
139 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)