web-dev-qa-db-fra.com

Comment capturer des images avec des dimensions vides?

J'ai créé un plugin WordPress qui insère les attributs widthet heightdans toutes les images, par exemple:

<img src="https://placehold.it/100x50">
- to -
<img src="https://placehold.it/100x50" width="100" height="50">

Cependant, lorsque certaines images ont des dimensions vides (pour widthet heightname__), mon code ne le détecte pas, par exemple:

<img src="https://placehold.it/100x50" width="" height="">

Cependant, quand il n'y a qu'une seule dimension vide, mon plugin le détecte. Les deux exemples suivants fonctionneront:

<img src="https://placehold.it/100x50" width="">
<img src="https://placehold.it/100x50" height="">

Voici le code source . À la ligne 43 ( # ), c’est la logique que j’utilise pour déterminer s’il manque un widthname __/heightdans une image:

if ( ! in_array( 'width', $img[1] ) || ! in_array( 'height', $img[1] ) ) {

J'ai essayé la logique mise à jour suivante, mais cela ne fonctionne pas:

if ( # Images with no width/height
    ! in_array( 'width', $img[1] ) || ! in_array( 'height', $img[1] ) ||
    # Images with blank width/height
    ( in_array( 'width', $img[1] ) && in_array( '""', $img[1] ) ) || ( in_array( 'height', $img[1] ) && in_array( '""', $img[1] ) )
) {

Suis-je dans la bonne zone? Qu'est-ce que je fais mal dans ma logique?

4

Personnellement, la première chose que je ferais après la mise en correspondance des attributs est de créer un tableau associatif de:

array( 'attribute_name' => 'attribute_value' )

Il sera plus facile d'obtenir l'attribut directement que d'avoir à chercher dans le tableau et je pense que dans l'ensemble, le code sera plus direct. Puisque nous savons que l'index 0 est notre nom d'attribut et que l'index 1 est notre valeur d'attribut, nous pouvons utiliser array_combine () pour créer le format indiqué ci-dessus:

$attributes = array_combine( $img[1], $img[2] );

Enfin, nous pouvons éliminer toutes les valeurs vides du tableau en recherchant la différence, puis en exécutant la condition.

$attributes = array_diff( $attributes, array( '""' ) );

Bien entendu, vous devrez refactoriser votre code pour prendre en compte le nouveau tableau associatif $attributes['src'] et ainsi de suite. Le problème avec votre solution d'origine était que vous recherchiez la valeur dans l'index 1 où vous auriez dû chercher dans l'index 2 (qui contient les valeurs):

if ( # Images with no width/height
    ! in_array( 'width', $img[1] ) || ! in_array( 'height', $img[1] ) ||
    # Images with blank width/height
    ( in_array( 'width', $img[1] ) && in_array( '""', $img[2] ) ) || ( in_array( 'height', $img[1] ) && in_array( '""', $img[2] ) )
) {
3
Howdy_McGee