我有一个字符串ex:
$ a =' abcabc';
小蓝钻'是:bin2hex('') => f09f94b9
Small blue diamond representation
所以,我想将$ a字符串转换为一个字符串,表示带有HTML-escape的小蓝钻:🔹
将调用所有unicode字符转换为HTML-escape表示形式的函数是什么?
在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接受的表示形式。
答案 0 :(得分:3)
以下是我想要转换的所有字符,您可以将其进一步修改为仅转换所需范围内的字符。
$s = 'abcdef';
$a = preg_split('//u', $s, null, PREG_SPLIT_NO_EMPTY);
foreach($a as $c){
echo '&#' . unpack('V', iconv('UTF-8', 'UCS-4LE', $c))[1] . ';';
}