Nouveau sur le forum ? Voici votre case départ pour bien débuter.

Liens contextuels :

Auteur
SpaceCowboy
# 01 May 2008 - 17:34:34
Citer
29 Posts
Il existe tout un tas de fonction, mais apparament en UTF8 ca ne fonctionne pas très bien.

Une fonction trouvé sur expreg.com
<?php
$chaine='Hélène Dupont';
function ote_accent($str){
$ch = strtr($str,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return $ch;
}
echo ote_accent($chaine);
?>

Je crée un fichier avec le notepad, j'enregistre en UTF8 (le codage). Donc le fichier et les données sont en UTF8 ?
J'obtient ...
http://pix.nofrag.com/8/b/f/dc845b58504cc52001dff88b82aeb.png
Je bloque vraiment ...


Voila la page au complet :
<?php
function ote_accent($str)
{
$ch = strtr($str,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'aaaaaceeeeiiiiooooouuuuyaaaaaaceeeeiiiioooooouuuuyy');
return $ch;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<?php
$chaine='Héléne Dupont';
echo $chaine.'<br />';
echo ote_accent($chaine);
?>
</body>
</html>

Modifié par SpaceCowboy (01 May 2008 - 17:36)

^
Florent V.
# 01 May 2008 - 18:21:32
Citer
On va manger des chips.
Modérateur
11976 Posts
Et le rapport avec la choucroute?

Comme ce sujet n'a apparemment rien à voir avec HTML, je le déplace dans le salon Encodage et internationalisation. cligne

Pour le reste...
$ch = strtr($str,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'aaaaaceeeeiiiiooooouuuuyaaaaaaceeeeiiiioooooouuuuyy');
return $ch;
Il te manque un caractère dans la suite des caractères de remplacement.

http://www.covertprestige.net 
^
Heyoan
# 01 May 2008 - 18:35:51
Citer
Un p'tit Kiwiz Coca ?
Modérateur
2057 Posts
Salut SpaceCowboy cligne ,

je pense que même avec le bon nombre de caractères ça ne pourra pas fonctionner car l'encodage de l'utf-8 est multi-octets et donc un caractère nécessite 2 octets (qu'on m'arrête si je me gourge langue ) alors que la fonction strtr remplace caractère par caractère. Une solution qui devrait marcher :

page_utf8.php (encodée en utf-8)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
</style>
</head>
<body>
<?php
include('page_iso.php');
$chaine='Héléne Dupont';
echo $chaine.'<br />';
echo ote_accent($chaine);
?>
</body>
</html>


page_iso.php (encodée en iso-8859-1)
<?php
function ote_accent($str){
$str = utf8_decode($str);
$ch = strtr($str,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return utf8_encode($ch);
}
?>

D'autres solutions possibles (notamment un seul tableau dans la fonction avec des paires murf ) en regardant le lien...

A+
Modifié par Heyoan (01 May 2008 - 18:41)

J'ai beau tourner ça dans tous les sens, c'est quand même bizarre qu'on existe au lieu de pas exister... non ?

http://www.heyoan.com 
^
Florent V.
# 01 May 2008 - 18:52:19
Citer
On va manger des chips.
Modérateur
11976 Posts
Heyoan a écrit :
l'encodage de l'utf-8 est multi-octets et donc un caractère nécessite 2 octets (qu'on m'arrête si je me gourge langue )

Ben alors je t'arrête. L'encodage d'un caractère en UTF-8 prend de 1 à 4 octets suivant les cas. Les caractères ASCII sont codés sur un octet, et tous les autres sur 2 à 4 octets (plutôt 2 pour les caractères européens, 3 ou 4 pour les kanji du japonnais, etc.).

Heyoan a écrit :
alors que la fonction strtr remplace caractère par caractère.

Tu te contredis. Si la fonction remplace caractère par caractère, elle devrait être capable de remplacer un caractère par un autre quel que soit le nombre d'octets du caractère de départ et le nombre d'octets du caractère d'arrivée. C'est uniquement si elle remplace octet par octet que cela pose problème (ou bien s'il y a un autre problème de support d'UTF-8 un peu plus subtil cligne ).

Je tenterais l'utilisation de strtr avec un tableau de correspondance passé comme variable.

http://www.covertprestige.net 
^
Florent V.
# 01 May 2008 - 19:16:44
Citer
On va manger des chips.
Modérateur
11976 Posts
Hop, à tester:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test page</title>
<style type="text/css" media="screen">
body {
margin: 100px 200px;
background: #432;
color: white;
font-size: 1.5em;
}
</style>
</head>

<body>

<p>
<?php

function ote_accent_1($str) {
$ch = strtr($str,
'Àé',
'Ae');
return $ch;
}
function ote_accent_1_bis($str) {
$ch = strtr($str,
'Àé',
'Éû');
return $ch;
}
function ote_accent_2($str) {
$table = array(
'À' => 'A',
'é' => 'e'
);
$ch = strtr($str, $table);
return $ch;
}

$chaine = 'À Héléne Dupont';
echo $chaine.'<br />';
echo ote_accent_1($chaine).'<br />';
echo ote_accent_1_bis($chaine).'<br />';
echo ote_accent_2($chaine);

?>
</p>

</body>
</html>

Si on ne lui passe pas un tableau de correspondance en paramètre pour les remplacements, mais deux chaines de caractères, strtr a l'air de travailler octet par octet, effectivement. On le voit avec les fonctions ote_accent_1 et ote_accent_1_bis (dans la deuxième, on remplace des caractères faisant chacun deux octets (en UTF-8) par des caractères de deux octets également. Donc ça marche (quoi que ça puisse poser problème à d'autres caractères qui utiliseraient un de ces deux octets!). Mais s'il y a une différence entre le nombre d'octets d'un caractère de départ et de son caractère de remplacement, c'est la merde.

En passant par un tableau ça marche bien.

http://www.covertprestige.net 
^
Heyoan
# 01 May 2008 - 19:19:28
Citer
Un p'tit Kiwiz Coca ?
Modérateur
2057 Posts
Florent V. a écrit :
Ben alors je t'arrête. L'encodage d'un caractère en UTF-8 prend de 1 à 4 octets suivant les cas. Les caractères ASCII sont codés sur un octet, et tous les autres sur 2 à 4 octets (plutôt 2 pour les caractères européens, 3 ou 4 pour les kanji du japonnais, etc.).
Arf ravi !

Florent V. a écrit :
C'est uniquement si elle remplace octet par octet que cela pose problème
C'est qu'est-ce que je voulais dire (double arf biggol !) mais je ne suis pas sûr non plus que ça fonctionne comme ça...

J'ai beau tourner ça dans tous les sens, c'est quand même bizarre qu'on existe au lieu de pas exister... non ?

http://www.heyoan.com 
^
Gofromiel
# 09 May 2008 - 18:57:50
Citer
3 Posts
@SpaceCowboy: Si ça peut aider, j'ai crée une fonction qui supprime les accents et transforme les ligatures comme "œ" en "oe" elle fonctionne avec n'importe quel type d'encodage (utf-8 aussi donc)

Tu pourras la trouver sur mon blog: Supprimer les accents des caractères accentués en PHP

http://www.weirdog.com 
^

référencesLes références web : openweb.eu.org - opquast.com - webmaster-hub.com - webrankinfo.com - salemioche.net - web-pour-tous.org - webonorme.org

Nos partenaires : Editions Eyrolles - Location vacances France - Location vacances Europe

Nikozen : Hébergement - Réalisation : Alsacreations.fr

Powered by Phedio v3.7.9 © dew
Contacter l'administrateur - 12.2 ms - Charte