微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Woocommerce 产品图像功能绕过站点字符编码并破坏斯堪的纳维亚字符

如何解决Woocommerce 产品图像功能绕过站点字符编码并破坏斯堪的纳维亚字符

所以我的情况有点糟糕。 目前,我正在为一家丹麦 Woocommerce 网上商店提供支持,但我们遇到了一个特殊的问题。

当产品显示在单一产品网站上时会出现问题,具体而言,属于产品图片的“title”将丹麦语特殊字符 æ ø å 分解为 æ ø Ã¥。网站、数据库和服务器上的每个字符集设置都设置为 UTF-8,但实例化产品图像的函数似乎不支持多字节字符。

据我所知,这是有问题的函数

function wc_get_gallery_image_html( $attachment_id,$main_image = false ) {
$flexslider        = (bool) apply_filters( 'woocommerce_single_product_flexslider_enabled',get_theme_support( 'wc-product-gallery-slider' ) );
$gallery_thumbnail = wc_get_image_size( 'gallery_thumbnail' );
$thumbnail_size    = apply_filters( 'woocommerce_gallery_thumbnail_size',array( $gallery_thumbnail['width'],$gallery_thumbnail['height'] ) );
$image_size        = apply_filters( 'woocommerce_gallery_image_size',$flexslider || $main_image ? 'woocommerce_single' : $thumbnail_size );
$full_size         = apply_filters( 'woocommerce_gallery_full_size',apply_filters( 'woocommerce_product_thumbnails_large_size','full' ) );
$thumbnail_src     = wp_get_attachment_image_src( $attachment_id,$thumbnail_size );
$full_src          = wp_get_attachment_image_src( $attachment_id,$full_size );
$alt_text          = trim( wp_strip_all_tags( get_post_meta( $attachment_id,'_wp_attachment_image_alt',true ) ) );
$image             = wp_get_attachment_image(
    $attachment_id,$image_size,false,apply_filters(
        'woocommerce_gallery_image_html_attachment_image_params',array(
            'title'                   => _wp_specialchars( get_post_field( 'post_title',$attachment_id ),ENT_QUOTES,'UTF-8',true ),'data-caption'            => _wp_specialchars( get_post_field( 'post_excerpt','data-src'                => esc_url( $full_src[0] ),'data-large_image'        => esc_url( $full_src[0] ),'data-large_image_width'  => esc_attr( $full_src[1] ),'data-large_image_height' => esc_attr( $full_src[2] ),'class'                   => esc_attr( $main_image ? 'wp-post-image' : '' ),),$attachment_id,$main_image
    )
);

return '<div data-thumb="' . esc_url( $thumbnail_src[0] ) . '" data-thumb-alt="' . esc_attr( $alt_text ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_src[0] ) . '">' . $image .  '</a></div>';

}

在我看来,apply_filters() 函数之一会破坏在数组中找到的字符串,特别是“title”和“data-caption”。

现在,我对网站进行了临时修复,在数据库中进行了简单的搜索和替换,将每个 æ、ø 和 å 替换为相应的 HTML 代码&aring; 等。 但从长远来看,当新产品添加数据库时,这并不能改变问题。

从我发现的情况来看,这不是一个常见问题,但希望比我更聪明的人会提供潜在的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。