[Résolu] Encodage des caractères avec script PHP

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
EmmaZL
Lézard à collerette
Messages : 245
Inscription : 07 août 2004, 00:43

[Résolu] Encodage des caractères avec script PHP

Message par EmmaZL »

Bonjour,

J'ai un scipt PHP qui permet de faire une recherche sur mon site web. Le résultat de la recherche est un "include" situé au milieu d'une page comportant du code HTML.

La page est codée comme ceci :

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Le problème c'est que les réultats de la recherche sont, d'après ce que j'ai compris, en UTF-8. En tout cas, quand je vais dans le menu affichage de FF et que je change l'encodage pour du UTF-8, les caractères redeviennent "normaux". J'ai essayé de mettre UTF-8 dans le code source, mais mêm si je choisis l'option "détection automatique -> Universel dans le menu affichage de FF, les caractères avec accents restent remplacés par des caractères bizarres.


Voilà un exemple : http://www.molos.ch/search2.php?q=presa

Et le script PHP :

Code : Tout sélectionner

<?php
	
	error_reporting(E_ALL & ~E_NOTICE);
	// Free script to search your site
	// Copyright 2004, Digital Point Solutions
	// version 1.2 - August 2, 2004
	//
	// Feel free to format the results however you see fit, the only thing we ask is that you leave a link to us in case others would like to add it to their site.
	// Links will be checked, and removal of the link could result it your website being blocked from using the service.
	// Other than that, have fun!  :)   - Shawn
	
	// Set your parameters here
	$key = "q7xLCulQFHLTMPK0/nV/I1qrk4v/X/yo";			// This is your Google API key, if you don't have one, get one for free at:
									// https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey
	
	$site = "www.molos.ch";		// This is the site you wish to search within
									// If Google has you indexed without "www.", don't specify "www." within your site URL.
									// 'http://' is *not* required in the site variable.
									// Examples:
									// www.cnn.com			search within www.cnn.com
									// www.cnn.com/tech/	search within www.cnn.com/tech/
									//
									// You can also leave it blank to search the entire web

	$spelling = 0;					// Change this to 0 if you do not want to check for spelling suggestions
									// Using this option makes searches twice as long, because it requires 2 queries instead of 1
	
	// Colors
	$color_border = "#ffffff";
	$color_title = "#ffffff";
	$color_odd_results = "#ffffff";
	$color_even_results = "#ffffff";


	$q = stripslashes ($HTTP_GET_VARS['q']);
	$start = 0 + $HTTP_GET_VARS['start'];

	

	ini_set ("allow_url_fopen", "1");
	if (!ini_get ("allow_url_fopen")) echo '<FONT COLOR=RED><B>Sorry, this PHP configuration does not allow for usage of <A HREF="http://www.php.net/manual/en/ref.filesystem.php#ini.allow-url-fopen" TARGET="_blank">fopen()</A>, which is required for this search engine script.</B></FONT><P>';

	// Let's get the results
	$handle = @fopen ("http://search.digitalpoint.com/?q=" . urlencode ($q) . "&key=" . urlencode ($key) . "&site=" . urlencode ($site) . "&start=" . min (990, $start) . "&spell=" . $spelling, "r");
	while (!feof ($handle) && $handle) {
		$line .= fgets ($handle, 1024);
	}
	fclose($handle);
		
	eval ('$urls = ' . $line . ';');
		
	echo '<TABLE class="align-justify" BGCOLOR=' . $color_border . ' CELLSPACING=1 CELLPADDING=0><TR><TD><TABLE class="align-justify" BGCOLOR=' . $color_odd_results . ' border=0 CELLSPACING=0 CELLPADDING=6><TR BGCOLOR=' . $color_title . '><TH COLSPAN=3>';
	echo '<TABLE class="align-justify" border=0 WIDTH=100%><TR><TH class="align-justify" WIDTH=80 ALIGN=CENTER VALIGN=MIDDLE><FONT SIZE=-1><A HREF="http://www.digitalpoint.com/tools/search/">Add Search<BR>To Your Site</A></FONT></TH><TH ALIGN=CENTER>';
	
	echo '&nbsp;&nbsp;';
	
	if ($urls['end'] - $urls['start'] < 9) $urls['results'] = $urls['end'];
	
	if ($urls['results'] > 10) {

		if ($start < 40) {
			$x = 0;
		} else {
			$x = round (max (0, min ($start - 40, $urls['results'] - 96) / 10));
		}
		for ($i = $x; $i < $x + 10; $i++) {
			if ($i != round ($start / 10)) {
				echo '<A HREF="search.php?q=' . urlencode($q) . '&start=' . ($i * 10) . '">' .  ($i + 1) . "</A>&nbsp;&nbsp;";
			} else {
				echo ($i + 1) . "&nbsp;&nbsp;";
			}
			if (max (10, ($i + 1) * 10) >= $urls['results']) break;
		}

		echo '<BR>';
	}
	
	echo '<FONT SIZE=+1>Estimated Total Results:  ' . number_format ($urls['results']) . '</FONT>';
	if ($urls['spelling']) echo '<br><font color="red">Did you mean: <a href="search.php?q=' . urlencode($urls['spelling']) . '">' . $urls['spelling'] . '</a></font>';

	echo '</TH><TH WIDTH=80>&nbsp;</TH></TR></TABLE>';

	$rownum = 1;
	
	$start = $urls['start'];
	if ($urls['error']) {
		echo "<TR COLSPAN=3><TD><BR><FONT SIZE=-1 COLOR=RED>" . $urls['error'] . "</FONT></TD></TR>";
	} else {
	
		foreach ($urls['urls'] as $key => $url) {
			$rownum++;
			echo "<TR";
			if ($rownum % 2 == 1) echo ' BGCOLOR=' . $color_even_results;
			echo "><TH ALIGN=RIGHT WIDTH=35>#" . ($key + $start) . ":&nbsp;</TH><TD class='align-justify'><A HREF=\"$url\" class=align-justify>" . $urls['titles'][$key] . "</A><BR>" . $urls['snippet'][$key] . "<BR><span class=align-justify>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>$url</B></span></TD><TD>&nbsp;&nbsp;&nbsp;</TD></TR>";
		}
	}
	echo '</TABLE></TD></TR></TABLE>';

	
?>
Merci d'avance !! :wink:
Dernière modification par EmmaZL le 19 févr. 2006, 14:38, modifié 1 fois.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème. (devise Shadok)
Ma configuration
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Bon, visiblement on va dire que le site retourne du code en utf-8. Admettons.
Pour le transformer en iso-8859-1 tu peux utiliser un utf-8 decode.
Par contre, où... le code est tellement moche qu'il est totalement illisible (en tous cas pour moi). Essaye de l'épurer un peu, parce que tous ces tableaux... :roll:
EmmaZL
Lézard à collerette
Messages : 245
Inscription : 07 août 2004, 00:43

Message par EmmaZL »

Merci Calimo...

En fait j'ai rajouté ceci et ça fonctionne :

Code : Tout sélectionner

	$line = preg_replace("/\</mis","[LEFT-TAG]",$line);
	$line = preg_replace("/\>/mis","[RIGHT-TAG]",$line);
	$line = preg_replace("/'/mis","[SINGLE-QUOTE]",$line);
	$line = preg_replace("/\&/mis","[AMPERSAND]",$line);
	$line = htmlentities($line,ENT_NOQUOTES,'UTF-8');
	$line = preg_replace("/\[LEFT-TAG\]/mis","<",$line);
	$line = preg_replace("/\[RIGHT-TAG\]/mis",">",$line);
	$line = preg_replace("/\[SINGLE-QUOTE\]/mis","'",$line);
	$line = preg_replace("/\[AMPERSAND\]/mis","&",$line);
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème. (devise Shadok)
Ma configuration
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Tu fais ça pour chaque ligne ? Ce n'est probablement pas la manière la plus efficace (je parle en terme de ressources pour le serveur là...) :?
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités