D’après un script bash, je génère le résultat vers un fichier texte.
En console, le fichier texte ne présente pas d’anomalies en termes d’accents mais si je le place sur mon petit site “de-test-bidoulle-maison”, les accents ne sont pas pris en charge.
Le résultat problématique passe à travers Apache / navigateur ? Si c’est bien ça, c’est probablement juste un problème de headers dans Apache. Faudrait voir comment tu exploites le résultat précisément, mais avec une page PHP il suffirait de rajouter :
C’est juste un problème de jeu de caractères.
Pour vérifier que c’est bien ça, une fois le fichier affiché dans Iceweasel tu peux faire un clic droit dans la page -> Informations sur la page -> onglet Général -> Encodage (qui sera sûrement en ISO-8859-1 alors qu’il devrait être en UTF-8).
Il y a d’autres solutions plus simples que de passer par du PHP juste pour afficher ton fichier. Apache a une directive pour forcer le jeu de caractères par défaut (AddDefaultCharset) que tu peux mettre soit dans la config globale, soit dans un .htaccess pour un répertoire donné (celui contenant tes fichiers texte).
La config globales c’est gênant et le htaccess c’est le mal. Tu fait déjà presque du CGI. Autant générer du HTML ça rajoute 10 lignes à ton script et ça marcheras pour n’importe quel serveur web.
[code]#!/bin/bash
film=false
titre=""
cat <<EOF
Agenda des sorties DVD
EOF
while read
do
[[ ${REPLY} == *picturezone* ]] && film=true
[[ ${REPLY} == De\ \<a* ]] && auteur=$(IFS='<>' infos=( ${REPLY} ); echo ${infos[2]})
[[ ${REPLY} == Avec\ \* ]] && {
if [[ ! ${titre} ]]
then
titre="${REPLY}"
else
if [[ ! ${typeFilm} ]]
then
typeFilm="${REPLY}"
else
cat <<EOF
Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}
EOF
film=false
titre=""
typeFilm=""
fi
fi
}
}
done < <(wget -qO- http://www.allocine.fr/dvd/agenda/)
echo ''
true
[/code]
Comme ça si tu veux un peu améliorer l’affichage (avoir un cadre par film par exemple) c’est facile.
Si tu as l’intention de reparser le bidule derrière c’est plus gênant (mais dans ce cas là ton parseur se fout de l’encodage et tu peux envoyer tel quel ton fichier).
Nan. Mais ça crée une dépendance vers apache et j’aime bien les alternatives d’apache (nginx, light-httpd, chrokee, etc) qui n’utilisent pas d’htaccess pour des problèmes de performance il semble.
Le htaccess est très pratique et je ne pense pas que les alternatives à apache aient une bonne solution pour permettre à pleins d’utilisateurs de configurer leur virtual host en parallèle (ce qui est nécessaire dans les solutions d’hébergement mutualisées comme les pages perso de free).
Bref le htaccess n’est pas à proscrire mais personnellement j’essaie de ne pas les utiliser quand c’est possible.
PS : OMG ! J’ai commis une erreur dans le script ! Le fichier généré n’est pas très propre et pourtant je l’ai passé au validateur w3c !
J’ai omis de fermer la balise html.
Pour la peine voici une version que je trouve plus claire (j’aime bien les switch) :
Agenda des sorties DVD
EOF
while read
do
case "${REPLY}" in
*picturezone*)
film=true
;;
De\ \<a*)
auteur=$(IFS='<>' infos=( ${REPLY} ); echo ${infos[2]})
;;
Avec\ \* ]]
then
if [[ ! ${titre} ]]
then
titre="${REPLY}"
elif [[ ! ${typeFilm} ]]
then
typeFilm="${REPLY}"
else
cat <<EOF
Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}
EOF
film=false
titre=""
typeFilm=""
fi
fi
;;
esac
done < <(wget -qO- "$url")
echo ''
true
[/code]
Titre=Objection
Type=Drame
Date Sortie=02/04/2012
De=Erik Lochen
Avec=Espen Skjønberg, Per Theodor Haugen
Résumé=Une équipe de film s'active sur un tournage. Le réalisateur est interviewé. Ce que son film raconte ? "Laissons le spectateur inventer l'intrigue". Sa ...
Agenda des sorties DVD
EOF
while read
do
case "${REPLY}" in
*picturezone*)
film=true
;;
De\ \<a*)
auteur=$(IFS='<>' infos=( ${REPLY} ); echo ${infos[2]})
;;
Avec\ \* ]]
then
if [[ ! ${titre} ]]
then
titre="${REPLY}"
elif [[ ! ${typeFilm} ]]
then
typeFilm="${REPLY}"
else
cat <<EOF
Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}
EOF
film=false
titre=""
typeFilm=""
fi
fi
;;
esac
done < <(wget -qO- "$url")
echo ''
Sérieusement non j’ai rien de bien. C’est extrêmement éparse et je ne peux parler de ce genre de truc que parce que Totor m’a fait comprendre que le shell était plus puissant que je ne le soupçonnait. Maintenant quand j’ai besoin de quelque chose comme ça je cherche et je teste. Là en l’occurrence j’avais vu qu’il était possible de manipuler directement les descripteurs de fichiers en ksh dans un linux mag, j’avais déjà eu l’idée qu’on pouvait donc manipuler le numéro 1 qui représente la sortie standard. Une recherche les mots « bash filedescriptor » m’a amené à ça : forums.devshed.com/unix-help-35/ … 54812.html
J’ai testé vite fait et voila. Ce serait vraiment bien de faire une doc complète sur le scripting shell, mais je ne vois même pas comment organiser ça pour que ce soit simple de s’y retrouver.