我有一个字符串ex:
$a = 'abc?abc';
“小蓝钻”是:bin2hex('?') => f09f94b9
Small blue diamond representation
因此,我想使用HTML- $a:🔹将转义字符串转换为表示小蓝色菱形的字符串
我应该调用什么函数来将所有unicode字符转换为HTML转义表示?
有关此案例的更多详细信息
在WordPress中,当我想要将$a变量插入到表中时,$wpdb会进行检查。Link to WPDB source code
当WordPress准备要插入或更新的$data时,它会运行$wpdb->strip_invalid_text方法上的字段,然后检查在$data中是否发现任何无效的内容。如果使用以下正则表达式,$a变量中的文本无效:
$regex = '/
(
(?: [\x00-\x7F] # single-byte sequences 0xxxxxxx
| [\xC2-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
| \xE0[\xA0-\xBF][\x80-\xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [\xE1-\xEC][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| [\xEE-\xEF][\x80-\xBF]{2}';
if ( 'utf8mb4' === $charset ) {
$regex .= '
| \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences 11110xxx 10xxxxxx * 3
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
';
}
$regex .= '){1,40} # ...one or more times
)
| . # anything else
/x';
$value['value'] = preg_replace( $regex, '$1', $value['value'] );
if ( false !== $length && mb_strlen( $value['value'], 'UTF-8' ) > $length ) {
$value['value'] = mb_substr( $value['value'], 0, $length, 'UTF-8' );
}当‘小蓝菱形’用f09f94b9表示时,这个正则表达式将数据标记为无效。当它用🔹表示时。所以我需要的是将unicode字符转换成WordPress可以接受的表示形式。
发布于 2017-02-16 01:51:13
这是我想出的转换所有字符的方法,你可以进一步修改它,只转换你需要的字符。
$s = 'abc?def';
$a = preg_split('//u', $s, null, PREG_SPLIT_NO_EMPTY);
foreach($a as $c){
echo '&#' . unpack('V', iconv('UTF-8', 'UCS-4LE', $c))[1] . ';';
}https://stackoverflow.com/questions/42255682
复制相似问题