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 (将#修改为@)