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