Alors tu m'excuseras Couin mais si on compte les points ce que je t'ai dit fonctionne très bien aussi, j'ai vérifié !
echo $title = "Latino Party – The Party";
echo str_replace('–', ':p', $title);
// Latino Party – The Party
// Latino Party :p The Party
PS : ceci dit l'approche de or 1 est intéressante.
EDIT et je l'ai testé en post aussi avec copié/collé du titre depuis le site sans souci, j'ai même pas mis le charset (je travaille en utf-8 avec PhpStorm et Firefox).
<form method="post">
<input type="text" name="title" value="<?php echo $_POST['title'] ?? '' ?>"/>
<input type="submit" value="submit"/>
</form>
<?php
if (isset($_POST['title']))
echo str_replace('–', ':p', $_POST['title']);
PPS : j'ai copié le titre complet dans PhpStorm puis j'ai sélectionné le tiret (le caractère visible puis une sorte d'octet invisible) que j'ai collé dans le str_replace. Apparemment il y a plus de deux octets d'après la boucle de or 1 (y en aurait 6) mais PhpStorm le gère comme ça et ça fonctionne très bien.
Cependant, j'avoue ne pas du tout comprendre comment tu es arrivé à cette chaîne là ?
Car si je regarde une table ASCII :
Sauf que la chaîne n'est pas en ASCII mais en utf-8. Le tiret long n'existe pas en ASCII. Et d'ailleurs la table ASCII de base ne contient aucun caractère accentué, pas plus que de symbole monétaire à part le $. Il faut aller taper dans la table ASCII étendue pour trouver des caractères accentués et je n'y ai pas vu de symbole €...
L'ASCII étendu encode 256 caractères la où l'utf-8 peut en encoder plus d'un million.
Je pense que la chaîne que tu obtiens (‎–) correspond à un affichage ISO-8859-1 ou similaire. Si tu passes l’affichage en utf-8 tu obtiendras bien le fameux –.
or 1 a obtenu cette suite de byte values en lisant la chaîne octet par octet (avec le for) et en utilisant la fonction ord qui permet d'obtenir la byte value de l'octet (un byte ou octet = 8 bits, 1 bit est égal à 0 ou 1, soit 2^8 valeurs pour 1 byte, soit 256 valeurs de byte de 0 à 255).
Avec cette boucle on voit bien que le – est composé de 6 octets (226, 128, 142, 226, 128, 147) correspondant aux 6 caratcères ‎– en ISO-8859-1 et au – en utf-8 :
L => 76
a => 97
t => 116
i => 105
n => 110
o => 111
=> 32
P => 80
a => 97
r => 114
t => 116
y => 121
=> 32
? => 226
? => 128
? => 142
? => 226
? => 128
? => 147
=> 32
T => 84
h => 104
e => 101
=> 32
P => 80
a => 97
r => 114
t => 116
y => 121
Alors tu m'excuseras Couin mais si on compte les points ce que je t'ai dit fonctionne très bien aussi, j'ai vérifié !
[PHP]echo $title = "Latino Party – The Party";
echo str_replace('–', ':p', $title);
// Latino Party – The Party
// Latino Party :p The Party[/PHP]
PS : ceci dit l'approche de or 1 est intéressante.
EDIT et je l'ai testé en post aussi avec copié/collé du titre depuis le site sans souci, j'ai même pas mis le charset (je travaille en utf-8 avec PhpStorm et Firefox).
[PHP]<form method="post">
<input type="text" name="title" value="<?php echo $_POST['title'] ?? '' ?>"/>
<input type="submit" value="submit"/>
</form>
<?php
if (isset($_POST['title']))
echo str_replace('–', ':p', $_POST['title']);[/PHP]
PPS : j'ai copié le titre complet dans PhpStorm puis j'ai sélectionné le tiret (le caractère visible puis une sorte d'octet invisible) que j'ai collé dans le str_replace. Apparemment il y a plus de deux octets d'après la boucle de or 1 (y en aurait 6) mais PhpStorm le gère comme ça et ça fonctionne très bien.
[quote]Cependant, j'avoue ne pas du tout comprendre comment tu es arrivé à cette chaîne là ?
Car si je regarde une table ASCII : [/quote]
Sauf que la chaîne n'est pas en ASCII mais en utf-8. Le tiret long n'existe pas en ASCII. Et d'ailleurs la table ASCII de base ne contient aucun caractère accentué, pas plus que de symbole monétaire à part le $. Il faut aller taper dans la table ASCII étendue pour trouver des caractères accentués et je n'y ai pas vu de symbole €...
L'ASCII étendu encode 256 caractères la où l'utf-8 peut en encoder plus d'un million.
Je pense que la chaîne que tu obtiens (‎–) correspond à un affichage ISO-8859-1 ou similaire. Si tu passes l’affichage en utf-8 tu obtiendras bien le fameux –.
or 1 a obtenu cette suite de byte values en lisant la chaîne octet par octet (avec le for) et en utilisant la fonction ord qui permet d'obtenir la byte value de l'octet (un byte ou octet = 8 bits, 1 bit est égal à 0 ou 1, soit 2^8 valeurs pour 1 byte, soit 256 valeurs de byte de 0 à 255).
Avec cette boucle on voit bien que le – est composé de 6 octets (226, 128, 142, 226, 128, 147) correspondant aux 6 caratcères ‎– en ISO-8859-1 et au – en utf-8 :
[PHP]L => 76
a => 97
t => 116
i => 105
n => 110
o => 111
=> 32
P => 80
a => 97
r => 114
t => 116
y => 121
=> 32
? => 226
? => 128
? => 142
? => 226
? => 128
? => 147
=> 32
T => 84
h => 104
e => 101
=> 32
P => 80
a => 97
r => 114
t => 116
y => 121[/PHP]