Re: problème avec php

Page principale

Répondre à ce message
Auteur: anne.guilde@free.fr
Date:  
À: guilde
Sujet: Re: problème avec php
Le 09/12/2019 à 17:25, Marc BERLIOUX a écrit :
> Le 9 décembre 2019 09:18:37 GMT+01:00, "anne.guilde@???" <anne.guilde@???> a écrit :
>> Le 09/12/2019 à 04:18, anne.guilde@??? a écrit :
>>> Le 08/12/2019 à 14:01, Jérôme Villafruela a écrit :
>>>> Le 08/12/2019 à 03:26, anne.guilde@??? a écrit :
>>>>>
>>>>> Cela fonctionne. Je me suis débrouillée avec open_basedir et le
>>>>> répertoire /tmp
>>>>>
>>
>> suite
>>
>> J'ai récupéré un fichier vcard avec nextcloud
>>
>> VCARD
>> --------
>> BEGIN:VCARD
>>
>> VERSION:3.0
>> ...
>> TEL;TYPE="HOME,VOICE":12345678
>>
>> TEL;TYPE="WORK,VOICE":87654321
>>
>> TEL;TYPE=CELL:12378456
>> ...
>> END:VCARD
>> BEGIN:VCARD
>>
>> VERSION:3.0
>> ...
>> TEL;TYPE=home:+33 3 12 34 56 78
>> TEL;TYPE=cell,PREF:+33 6 12 34 56 78
>> TEL;TYPE=work:+33 6 12 34 56 78
>> ...
>> END:VCARD
>> --------
>>
>> Dans un script pour transformer des vcard en csv, j'ai une fonction
>> pour
>> récupérer les numéros de téléphone
>>
>>     function parse_tel(&$node, &$vcard)
>>     {
>>         foreach($node as $tel)
>>         {
>>             if (in_array_nc("PAGER", $tel['param']['TYPE']))
>>                 $vcard->pager = $tel['value'][0][0];
>>             else if (in_array_nc("CELL", $tel['param']['TYPE']))
>>                 $vcard->mobile = $tel['value'][0][0];
>>             else if (in_array_nc("FAX", $tel['param']['TYPE']))
>>                 $vcard->fax = $tel['value'][0][0];
>>             else if (in_array_nc("HOME", $tel['param']['TYPE']) ||
>> in_array_nc("PREF", $tel['param']['TYPE']))
>>             {
>>                 if (in_array_nc("FAX", $tel['param']['TYPE']))
>>                     $vcard->home['fax'] = $tel['value'][0][0];
>>                 else
>>                     $vcard->home['phone'] = $tel['value'][0][0];
>>             }
>>             else if (in_array_nc("WORK", $tel['param']['TYPE']))
>>             {
>>                 if(in_array_nc("FAX", $tel['param']['TYPE']))
>>                     $vcard->work['fax'] = $tel['value'][0][0];
>>                 else
>>                     $vcard->work['phone'] = $tel['value'][0][0];
>>             }
>>         }
>>     }

>>
>> Quand j'ai cela dans la vcard
>> TEL;TYPE=home:+33 3 12 34 56 78
>>
>> TEL;TYPE=cell,PREF:+33 6 12 34 56 78
>> TEL;TYPE=work:+33 6 12 34 56 78
>> C'est ok
>>
>> Quand j'ai cela dans la vcard
>> TEL;TYPE="HOME,VOICE":12345678
>> TEL;TYPE="WORK,VOICE":87654321
>> TEL;TYPE=CELL:12378456
>> Je ne récupère que TEL;TYPE=CELL:12378456 dans le csv
>>
>> Je pense que c'est à cause des "
>>
>> Si vous avez la solution
>>
>> Merci
>> Anne
>
> Il y a des fonctions comme 'addslashes' qui peuvent peut-être t'intéresser pour résoudre ce problème.
>
>


J'ai mis des points pour voir ce qui  se passait
----------
         /**
          * Helper method to parse an phone number node
          *
          * @access private
          */
         function parse_tel(&$node, &$vcard)
         {
                 foreach($node as $tel)
                 {
echo "  ---  ";
echo "type : ".$tel['param']['TYPE'][0];
echo "  ---  0 ---- ";
                         if (in_array_nc("PAGER", $tel['param']['TYPE'][0]))
                         {       $vcard->pager = $tel['value'][0][0];
                                 echo "  ---  1 ---- ";
                         }
                         else if (in_array_nc("CELL", 
$tel['param']['TYPE'][0]))
                         {
                                 $vcard->mobile = $tel['value'][0][0];
                                 echo "  ---  2 ---- ";
                         }
                         else if (in_array_nc("FAX", 
$tel['param']['TYPE'][0]))
                         {
                                 $vcard->fax = $tel['value'][0][0];
                                 echo "  ---  3 ---- ";
                         }
                         else if (in_array_nc("HOME", 
$tel['param']['TYPE'][0])  || in_array_nc("PREF", $tel['param']['TYPE'][0]))
                         {
                                 echo "  ---  4 ---- ";
                                 if (in_array_nc("FAX", 
$tel['param']['TYPE'][0]))
                                 {
                                         $vcard->home['fax'] = 
$tel['value'][0][0];
                                         echo "  ---  5 ---- ";
                                 }
                                 else
                                 {
                                         $vcard->home['phone'] = 
$tel['value'][0][0];
                                         echo "  ---  6 ---- ";
                                 }
                         }
                         else if (in_array_nc("WORK", 
$tel['param']['TYPE'][0]))
                         {
                                 echo "  ---  7 ---- ";
                                 if(in_array_nc("FAX", 
$tel['param']['TYPE'][0]))
                                 {
                                         $vcard->work['fax'] = 
$tel['value'][0][0];
                                         echo "  ---  8 ---- ";
                                 }
                                 else
                                 {
                                         $vcard->work['phone'] = 
$tel['value'][0][0];
                                         echo "  ---  9 ---- ";
                                 }
                         }
                 }
         }
----------


echo "type : ".$tel['param']['TYPE'][0];

TEL;TYPE="HOME,VOICE":12345678

J'ai ajouté [0] pour avoir le premier poste du tableau.

Mais cela n'a pas fait ce que je pensais

=> type : "HOME

Il reste le "

Pourquoi nextcloud me met HOME,VOICE avec des "

Avec le téléphone mobile, j'ai TEL;TYPE=cell,PREF: donc sans "

le test dans le script
in_array_nc("HOME", $tel['param']['TYPE'][0])

Comment faire?

Merci
Anne