Wordpress自定义文章类型编码


Wordpress custom post type encoding

我在Wordpress中保存自定义文章类型时遇到编码问题。当我点击更新时,UTF-8字符(č、š、ž、ø等)被转换为"u010d"和其他字符。

问题似乎出在表单上。我通过POST收到了已经断开的字符。

我已经用UTF-8编码保存了文件,并且我有用于HTML HEAD编码的元标记。

我能做些什么来解决这个问题?

谢谢!

编辑:

我有accept-charset="UTF-8"表格。

头部:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

功能:

add_action( 'save_post', 'layered_images_save_info' );
function layered_images_save_info( $post_id ) {
// verify nonce
if ( ! wp_verify_nonce( $_POST['layered_images_box_nonce'], basename( __FILE__ ) ) ) {
   return $post_id;
}
// check autosave
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
   return $post_id;
}
// check permissions
if ( 'layered_images' == $_POST[ 'post_type'] && current_user_can( 'edit_post', $post_id ) ) {
   /* Save Slider Images */
   //echo "";print_r($_POST['gallery_img']);exit;
    //$bla  = html_entity_decode($_POST[ 'layer_titles' ], ENT_QUOTES, "utf-8");
    $gallery_images = ( isset( $_POST[ 'gallery_img' ] ) ? $_POST[ 'gallery_img' ] : '' );
    $layer_opacity = ( isset( $_POST[ 'layer_opacity' ] ) ? $_POST[ 'layer_opacity' ] : '' );
    $layer_color = ( isset( $_POST[ 'layer_color' ] ) ? $_POST[ 'layer_color' ] : '' );
   //print_r($bla);exit;
    $gallery_images = strip_tags( json_encode( $gallery_images ) );
    $visible_layers = ( isset( $_POST[ 'visible_layers' ] ) ? $_POST[ 'visible_layers' ] : '' );
    $visible_layers = strip_tags( json_encode( $visible_layers ) );
    $visible_user_layers = ( isset( $_POST[ 'visible_user_layers' ] ) ? $_POST[ 'visible_user_layers' ] : '' );
    $visible_user_layers = strip_tags( json_encode( $visible_user_layers ) );
    $layer_titles = ( isset( $_POST[ 'layer_titles' ] ) ? $_POST[ 'layer_titles' ] : '' );
    $layer_titles =  json_encode( $layer_titles ) ;
    update_post_meta( $post_id, "_layer_gallery_images", $gallery_images );
    update_post_meta( $post_id, "_layer_visible_layers", $visible_layers );
    update_post_meta( $post_id, "_visible_user_layers", $visible_user_layers );
    update_post_meta( $post_id, "_layer_titles", $layer_titles );
    update_post_meta( $post_id, "_layer_opacity", $layer_opacity );
    update_post_meta( $post_id, "_layer_color", $layer_color );

} else {
   return $post_id;
}

}

像这样保存unicode字符似乎是json_encode的一个功能。你可以用强迫它不要这样做

json_encode( $text, JSON_UNESCAPED_UNICODE );

如本主题所示:为什么PHP json_encode函数将UTF-8字符串转换为十六进制实体?

或者根本不使用json_encode。WP内置了自己的序列化方法,用于在选项和元字段中保存数组。