fonction Première lettre en majuscule et passage en php8

bonjour
cette fonction a le message
Fatal error : Array and string offset access syntax with curly braces is no longer supported in /home/clients/a3580510d3989b69fb26134d5ef34fc5/sites/bianco/squelettes/mes_fonctions.php on line 52
pour

`//extrait la premiere lettre et la passe en majuscules
function onelettre($texte) {
$texte = $texte{0}; // premiere lettre —— et ligne 52
// remplacement des caracteres accentues
// exemple trouve ici :
// PHP: strtr - Manual
$texte = strtr($texte, « \xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF », « !ao?AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy »);
$texte = strtr($texte, array("\xC4"=>« Ae », « \xC6 »=>« AE », « \xD6 »=>« Oe », « \xDC »=>« Ue », « \xDE »=>« TH », « \xDF »=>« ss », « \xE4 »=>« ae », « \xE6 »=>« ae », « \xF6 »=>« oe », « \xFC »=>« ue », « \xFE »=>« th »));
return $texte;
$texte = strtoupper($texte); // tout en majuscules
return $texte;
}

function transcribe($texte) {
$texte = $texte{0};
$texte = strtr($texte,
« \xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7
\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1
\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0
\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC
\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8
\xF9\xFA\xFB\xFD\xFF »,
« !ao?AAAAAC
EEEEIIIIDN
OOOOOUUUYa
aaaaceeeei
iiidnooooo
uuuyy »);
$texte = strtr($texte, array("\xC4"=>« Ae », « \xC6 »=>« AE », « \xD6 »=>« Oe », « \xDC »=>« Ue », « \xDE »=>« TH », « \xDF »=>« ss », « \xE4 »=>« ae », « \xE6 »=>« ae », « \xF6 »=>« oe », « \xFC »=>« ue », « \xFE »=>« th »));
return($texte);
}`

Tu as des chaînes de texte avec ce type d’écriture : "mon texte${mavar}suite texte"
Il faut écrire : "mon texte{$mavar}suite texte"

Bonjour RealET

je me doute que la syntaxe a changé entre les versions php, mais là je ne vois pas se $ avant un { dans le code en question

Apparemment plus de message d’erreur en changeant

par

1 « J'aime »

Tu dois pouvoir alléger ta fonction avec les fonctions PHP mb_strtoupper et substr ou faire directement une lettrine en CSS.
.defaut_block p:first-of-type::first-letter

merci Touti,

je regarderais ces fonctions php (même si je n’y connais pas trop en programmation)

je m’en sert pour un menu de classement alphabétique (avec des initiales accentuées) qui affiche par défaut la liste des titres commençant par la lettre A (soit A, À, Â mais malheureusement pas Ä !)

<BOUCLE_listalpha(ARTICLES){id_rubrique IN 1,3,4} {par titre, date_redac} {" "}>[(#SET{beginby[(#TITRE|utf8_decode|onelettre)],[(#GET{beginby[(#TITRE|utf8_decode|onelettre)]}|array_merge5{#ARRAY{#COMPTEUR_BOUCLE,#ID_ARTICLE}})]})][<a href="[(#SELF|parametre_url{lettre,[(#TITRE|utf8_decode|onelettre)]})]" [(#TITRE|utf8_decode|onelettre|=={[(#ENV{lettre,A})]}|?{class='expose'})]>(#TITRE|onelettre|unique)</a>]</BOUCLE_listalpha>

à l’origine je partais de {collecte} - SPIP {collecte} mais comme le site est passé en utf8mb4_unicode_ci ce n’était plus utile

j’ai essayé de remplacer le filtre onelettre par ucfirst : ce n’est pas ça