Closed mgkprod closed 5 years ago
Le code est pas très beau mais je comprends pas pourquoi on ne pourrait pas reproduire son comportement en PHP.
J'ai écrit cette fonction vite fait en reprenant le modèle du code que tu as donné :
function vaporwave(string $input)
{
$output = '';
for ($i = 0; $i < strlen($input); $i++) {
$char = $input[$i];
list(, $code) = unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8'));
if ($code >= 33 && $code <= 270) {
$output .= mb_convert_encoding('&#' . intval($code + 65248) . ';', 'UTF-8', 'HTML-ENTITIES');
} elseif ($code == 32) {
$output .= chr($code);
}
}
return trim($output);
}
Ce qui donne :
λ php vaporwave.php
Vaporwave Aesthetic
Lors de l'appel suivant : vaporwave('Vaporwave Aesthetic');
.
J'ai pas testé beaucoup de cas évidemment, mais en partant du principe que la fonction Javascript donnée fonctionne, celle-ci devrait également être correcte.
Noté, j'implémente ça de suite.
Certains caractères utilisant de l'accentuation, retournent des points d'interrogations et ne sont donc pas convertis en UCS-4BE, voir ce post. Remplacer ces caractères par leur équivalent sans accent serait une solution.
Caractère : séparé par ; | è;é;ê;ë | ò;ó;ô;õ;ö | ù;ú;û;ü | à;á;â;ã;ä | ç |
---|---|---|---|---|---|
équivalent : | e | o | u | a | c |
Il y a possibilité d'utiliser le Transliterator de PHP pour éviter de réinventer la roue.
transliterator_transliterate('Any-Latin; Latin-ASCII;', $input);
J'ai pas cherché plus loin pour le code caractère à mettre, mais ça prend en charge la plupart des caractères spéciaux :
λ php vaporwave.php
Input: áÁàÀăĂâÂåÅãÃąĄāĀäÄæÆḃḂćĆĉĈčČċĊçÇďĎḋḊđĐðÐéÉèÈĕĔêÊěĚëËėĖęĘēĒḟḞƒƑğĞĝĜġĠģĢĥĤħĦíÍìÌîÎïÏĩĨįĮīĪĵĴķĶĺĹľĽļĻłŁṁṀńŃňŇñÑņŅóÓòÒôÔőŐõÕøØōŌơƠöÖṗṖŕŔřŘŗŖśŚŝŜšŠṡṠşŞșȘßťŤṫṪţŢțȚŧŦúÚùÙŭŬûÛůŮűŰũŨųŲūŪưƯüÜẃẂẁẀŵŴẅẄýÝỳỲŷŶÿŸźŹžŽżŻþÞµаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ
Output: aAaAaAaAaAaAaAaAaAaeAEbBcCcCcCcCcCdDdDdDdDeEeEeEeEeEeEeEeEeEfFfFgGgGgGgGhHhHiIiIiIiIiIiIiIjJkKlLlLlLlLmMnNnNnNnNoOoOoOoOoOoOoOoOoO
pPrRrRrRsSsSsSsSsSsSsstTtTtTtTtTuUuUuUuUuUuUuUuUuUuUuUwWwWwWwWyYyYyYyYzZzZzZthTH??aAbBvVgGdDeEeEzZzZiIjJkKlLmMnNoOpPrRsStTuUfFhHcC
cCsSsS""??yY''??eEuUaA
Voici le code mis à jour :
function vaporwave(string $input)
{
$input = transliterator_transliterate('Any-Latin; Latin-ASCII;', $input);
$output = '';
for ($i = 0; $i < strlen($input); $i++) {
$char = $input[$i];
list(, $code) = unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8'));
if ($code >= 33 && $code <= 270) {
$output .= mb_convert_encoding('&#' . intval($code + 65248) . ';', 'UTF-8', 'HTML-ENTITIES');
} elseif ($code == 32) {
$output .= chr($code);
}
}
return trim($output);
}
(cc @mgkprod)
Visiblement, il va falloir passer par un coup de JS, impossible de reproduire le même comportement du script en question en PHP.
Balise :
~Aesthetic~
Délimiteur :~
Script à "hook" :
https://github.com/prasiman/vaporwave-text-generator/blob/076f9419c7e104038528530c32b425a6a78d2226/script.js#L16-L28