Avatar billede dotcom1 Nybegynder
10. september 2005 - 15:43 Der er 12 kommentarer og
1 løsning

Specialtegn i variabel

Jeg har et script, der sender en variabel videre til en søgning på Google. Variablens indhold kommer fra et input-felt i en form:

<form name="form" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" method="get" />
<input type="text" name="q" value=" Indtast søgeord" />
<input name="Submit" type="submit" class="submit_knap" value=" Søg " />
</form>

$var = @$_GET['q'] ;
$trimmed = trim($var);

(...)

echo "<p><a href=\"http://www.google.com/search?q=" . $trimmed . "\" target=\"_blank\" title=\"Søg efter '" . $trimmed . "' på Google\" class=\"orange\">Klik her</a> for at søge efter <b>&quot;" . $trimmed . "&quot;</b> på google.</p>";
  }

Problemer er, at hvis ordet indeholder æ, ø, å så bliver bogstavet til ? i googles søgefelt, og dermed fejler søgningen.

Hvad kan man gøre for at afhjælpe det? Har forsøgt med bl.a. htmlentities() men uden success.

Mvh.
Avatar billede jakobdo Ekspert
10. september 2005 - 16:56 #1
Hvad med at brug: urlencode()
Avatar billede dotcom1 Nybegynder
10. september 2005 - 17:00 #2
Hvis man gør sådan:

echo "<p><a href=\"http://www.google.com/search?q=" . urlencode($trimmed) . "\" target=\"_blank\" title=\"Søg efter '" . $trimmed . "' på Google\" class=\"orange\">Klik her</a> for at søge efter <b>&quot;" . $trimmed . "&quot;</b> på google.</p>";

- så virker det desværre ikke.
Avatar billede jakobdo Ekspert
10. september 2005 - 17:23 #3
Avatar billede dotcom1 Nybegynder
10. september 2005 - 17:44 #4
Hmm, tja. Kan bare ikke forstå at man ikke kan sende indholdet af en variabel videre uden at indholdet forvrænges.
Avatar billede jakobdo Ekspert
10. september 2005 - 17:48 #5
Jeg er enig!
Men kan ikke lige tyde hvilken code form de bruger!
Jeg legede lidt:
jakob æder søde ål
Blev via urlencode til:
jakob+%E6der+s%F8de+%E5l
og på google blev det til:
jakob+%C3%A6der+s%C3%B8de+%C3%A5l
Avatar billede olebole Juniormester
10. september 2005 - 17:56 #6
<ole>

dotcom1 >> Naturligvis kan man ikke sende ikke-enkodede specialtegn som GET-variabler, når HTTP-protokollen ikke tilader specialtegn i URL'en  ;o)

Der er flere måder at enkode på, alt efter, hvad man vil opnå. Prøv rawurlencode, som er det, du har brug for her:
  http://dk2.php.net/manual/en/function.rawurlencode.php  ;o)

/mvh
</bole>
Avatar billede dotcom1 Nybegynder
10. september 2005 - 18:06 #7
Måske gør jeg det forkert, men

echo "<p><a href=\"http://www.google.dk/search?q=" . rawurlencode($trimmed) . "\" target=\"_blank\" title=\"Søg efter '" . $trimmed . "' på Google\" class=\"orange\">Klik her</a> for at søge efter <b>&quot;" . $trimmed . "&quot;</b> på Google.</p>";

gør ingen forskel.
Avatar billede olebole Juniormester
10. september 2005 - 18:08 #8
Sorry ... det er faktisk en funktion svarende til urlencode, de bruger  :)

Til gengæld bruger Google UTF-8 som charset. Derfor skal du bruge:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

- og gemme filen som UTF-8 og ikke som ANSI  :)
Avatar billede dotcom1 Nybegynder
10. september 2005 - 18:08 #9
Eller dvs, for at tage Jakobs forslag, så bliver rawurlencode til
jakob &aelig;der s&oslash;de &aring;l
i Googles søgefelt.
Avatar billede dotcom1 Nybegynder
10. september 2005 - 18:12 #10
Men hvis jeg bruger utf-8 i toppen af mit dokument, så kommer teksten jo til at se mærkelig ud. :)
Avatar billede olebole Juniormester
10. september 2005 - 18:42 #11
- så kunne man forestille sig, dokumentet stadig serves som iso-8859-1
Avatar billede dotcom1 Nybegynder
10. september 2005 - 21:40 #12
Altså, hele scriptet i sin helhed er jo en del af en eksisterende php-side. Hvis jeg ændrer charset til utf-8, så går det jo galt med alle danske specialtegn på den side...

Scriptet søger i en database, og er der ingen resultater tilbydes en søgning på Google, som åbner i en ny side. Så hvad gør det at ændre til utf-8?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Search</title>
</head>

<body>           
<form name="form" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" method="get">
<input type="text" name="q" value=" Search">
<input name="Submit" type="submit" value=" Search ">
</form>
<?php
  // Get the search variable from URL
  $var = @$_GET['q'] ;
  $s = @$_GET['s'] ;
  $trimmed = trim($var); //trim whitespace from the stored variable

  // Number of records to display per page ** EDIT REQUIRED HERE **
  $limit=10;

  // check for an empty string and display a message.
  if ($trimmed == "")
  {
  echo "<p>Please enter a search...</p>";
  exit;
  }

  // check for a search parameter
  if (!isset($var))
  {
  echo "<p>We dont seem to have a search parameter!</p>";
  exit;
  }

  //Connect to db
  include("sql.php");
 
  // Build SQL query
  $query = "SELECT * FROM tabel WHERE titel LIKE \"%$trimmed%\" ORDER BY titel DESC" OR error("MySQL Query Failed: ".mysql_error());

  $numresults=mysql_query($query);
  $numrows=mysql_num_rows($numresults);

  // If we have no results, offer a google search as an alternative

  if ($numrows == 0)
  {
  //echo "<h4>Resultater:</h4>";
  echo "<p>Beklager, din søgning efter <b>&quot;" . $trimmed . "&quot;</b> gav ingen resultater.</p>";

  // google
  echo "<p><a href=\"http://www.google.com/search?q=" . urlencode($trimmed) . "\" target=\"_blank\" title=\"Søg efter '" . $trimmed . "' på Google\">Klik her</a> for at søge efter <b>&quot;" . $trimmed . "&quot;</b> på google.</p>";
  }

  // next determine if s has been passed to script, if not use 0
  if (empty($s)) {
  $s=0;
  }

  // get results
  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");

  // begin to show results set
    if ($numrows > 0) {
    echo "Du har søgt efter <b>&quot;" . $trimmed . "&quot;</b> og følgende er fundet:<br />";
    echo "<br />";
    echo "<b>Resultater:</b><br />";
    $count = 1 + $s ;
}

  // display the results returned
  while ($row= mysql_fetch_array($result)) {
  $title = $row["titel"];
  echo "$count.&nbsp;$title";
  $count++ ;
  }

  $currPage = (($s/$limit) + 1);

  //break before paging
  echo "<br />";

  // next we need to do the links to other results
  if ($s>=1) { // bypass PREV link if s is 0
  $prevs=($s-$limit);
  print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt;&nbsp;Forrige</a>&nbsp;&nbsp&nbsp;";
  }
    if($count>$limit) {
  // calculate number of pages needing links
  $pages=intval($numrows/$limit);

  // $pages now contains int of pages needed unless there is a remainder from division

  if ($numrows%$limit) {
  // has remainder so add one page
  $pages++;
  }

  // check to see if last page
  if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

  // not last page so give NEXT link
  $news=$s+$limit;

  echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Næste&nbsp;&gt;&gt;</a>";
  }

  $a = $s + ($limit) ;
  if ($a > $numrows) { $a = $numrows ; }
  $b = $s + 1 ;
  echo "<p>------------------------------------<br />\n"
  ."Viser resultater $b til $a af $numrows</p>";
}
?>
</body>
</html>
Avatar billede dotcom1 Nybegynder
13. september 2005 - 00:17 #13
Tror lige at jeg gemmer problemet til en anden god gang...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester