This came about because I was trying to split a title string at the dash within WordPress. Not-so-quickly realizing that I had to account for all the different types of programmatic dashes out there that all look the same visibly. May this code snippet get you across the finish line faster.
// Make sure everything is using the same character set. $title1 = iconv(mb_detect_encoding( get_the_title( $post_ID ), mb_detect_order(), true ), "UTF-8", get_the_title( $post_ID ) ); // Convert the raw string and not HTML encoded output. $title2 = html_entity_decode( $title1, ENT_NOQUOTES | ENT_HTML5, "UTF-8" ); // Uniformly replace dashes. $dashes = ['–','–','—','-']; $title3 = str_replace( $dashes, '-' , $title2 ); $subtitle = explode( '-', $title3 );