PHP substr破坏表情符号

PHP substr破坏表情符号,php,emoji,Php,Emoji,我只需要从用户提交的段落中获取30个字符。如果第30个字符是表情符号,则输出将显示问号。如何避免破坏表情符号 echo substr(“你好世界你好世界地狱 <meta charset="ISO-8859-1"> OR function entities( $string ) { $stringBuilder = ""; $offset = 0; if ( empty( $string ) ) { return ""; }

我只需要从用户提交的段落中获取30个字符。如果第30个字符是表情符号,则输出将显示问号。如何避免破坏表情符号

echo substr(“你好世界你好世界地狱

 <meta charset="ISO-8859-1"> 

OR

function entities( $string ) {
    $stringBuilder = "";
    $offset = 0;

    if ( empty( $string ) ) {
        return "";
    }

    while ( $offset >= 0 ) {
        $decValue = ordutf8( $string, $offset );
        $char = unichr($decValue);

        $htmlEntited = htmlentities( $char );
        if( $char != $htmlEntited ){
            $stringBuilder .= $htmlEntited;
        } elseif( $decValue >= 128 ){
            $stringBuilder .= "&#" . $decValue . ";";
        } else {
            $stringBuilder .= $char;
        }
    }

    return $stringBuilder;
}

// source - http://php.net/manual/en/function.ord.php#109812
function ordutf8($string, &$offset) {
    $code = ord(substr($string, $offset,1));
    if ($code >= 128) {        //otherwise 0xxxxxxx
        if ($code < 224) $bytesnumber = 2;                //110xxxxx
        else if ($code < 240) $bytesnumber = 3;        //1110xxxx
        else if ($code < 248) $bytesnumber = 4;    //11110xxx
        $codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
        for ($i = 2; $i <= $bytesnumber; $i++) {
            $offset ++;
            $code2 = ord(substr($string, $offset, 1)) - 128;        //10xxxxxx
            $codetemp = $codetemp*64 + $code2;
        }
        $code = $codetemp;
    }
    $offset += 1;
    if ($offset >= strlen($string)) $offset = -1;
    return $code;
}

// source - http://php.net/manual/en/function.chr.php#88611
function unichr($u) {
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}

/* ---- */

var_dump( entities( "&" ) ) . "\n";
var_dump( entities( "<" ) ) . "\n";
var_dump( entities( "
$first = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($m) {
    $char = current($m);
    $utf = iconv('UTF-8', 'UCS-4', $char);
    return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0"));
}, $string);
或 函数实体($string){ $stringBuilder=“”; $offset=0; if(空($string)){ 返回“”; } 而($offset>=0){ $decValue=ordutf8($string,$offset); $char=unichr($decValue); $HTMLentites=htmlentities($char); 如果($char!=$htmlisted){ $stringBuilder.=$HTMLEnted; }elseif($decValue>=128){ $stringBuilder.=“&#”。$decValue.;”; }否则{ $stringBuilder.=$char; } } 返回$stringBuilder; } //来源-http://php.net/manual/en/function.ord.php#109812 函数ordutf8($string,&$offset){ $code=ord(substr($string,$offset,1)); 如果($code>=128){//否则0xxxxxxx 如果($code<224)$bytesnumber=2;//110xxxxx 如果($code<240)$bytesnumber=3;//1110xxxx,则为else 如果($code<248)$bytesnumber=4;//11110xxx,则为else $codetemp=$code-192-($bytesnumber>2-32:0)-($bytesnumber>3-16:0); 对于($i=2;$i=strlen($string))$offset=-1; 返回$code; } //来源-http://php.net/manual/en/function.chr.php#88611 联合国人权高专办职能($u){ 返回mb#u convert_编码('&#'.intval($u)。';','UTF-8','HTML-ENTITIES'); } /* ---- */ 变量转储(实体(“&”)。“\n”; 变量转储(实体(“

或
函数实体($string){
$stringBuilder=“”;
$offset=0;
if(空($string)){
返回“”;
}
而($offset>=0){
$decValue=ordutf8($string,$offset);
$char=unichr($decValue);
$HTMLentites=htmlentities($char);
如果($char!=$htmlisted){
$stringBuilder.=$HTMLEnted;
}elseif($decValue>=128){
$stringBuilder.=“&#”。$decValue.;”;
}否则{
$stringBuilder.=$char;
}
}
返回$stringBuilder;
}
//来源-http://php.net/manual/en/function.ord.php#109812
函数ordutf8($string,&$offset){
$code=ord(substr($string,$offset,1));
如果($code>=128){//否则0xxxxxxx
如果($code<224)$bytesnumber=2;//110xxxxx
如果($code<240)$bytesnumber=3;//1110xxxx,则为else
如果($code<248)$bytesnumber=4;//11110xxx,则为else
$codetemp=$code-192-($bytesnumber>2-32:0)-($bytesnumber>3-16:0);
对于($i=2;$i=strlen($string))$offset=-1;
返回$code;
}
//来源-http://php.net/manual/en/function.chr.php#88611
联合国人权高专办职能($u){
返回mb#u convert_编码('&#'.intval($u)。';','UTF-8','HTML-ENTITIES');
}
/* ---- */
变量转储(实体(“&”)。“\n”;
变量转储(实体(“
输出

echo json_decode('"\uD83D\uDE00"');

输出

echo json_decode('"\uD83D\uDE00"');


我认为最简单的解决办法是使用

根据存储的数量执行多字节安全substr()操作 人物

php>$myvariable=array();

php>$myvariable['hello']=mb_substr(“hello world hello world Hell我认为最简单的解决方案是使用

 <meta charset="ISO-8859-1"> 

OR

function entities( $string ) {
    $stringBuilder = "";
    $offset = 0;

    if ( empty( $string ) ) {
        return "";
    }

    while ( $offset >= 0 ) {
        $decValue = ordutf8( $string, $offset );
        $char = unichr($decValue);

        $htmlEntited = htmlentities( $char );
        if( $char != $htmlEntited ){
            $stringBuilder .= $htmlEntited;
        } elseif( $decValue >= 128 ){
            $stringBuilder .= "&#" . $decValue . ";";
        } else {
            $stringBuilder .= $char;
        }
    }

    return $stringBuilder;
}

// source - http://php.net/manual/en/function.ord.php#109812
function ordutf8($string, &$offset) {
    $code = ord(substr($string, $offset,1));
    if ($code >= 128) {        //otherwise 0xxxxxxx
        if ($code < 224) $bytesnumber = 2;                //110xxxxx
        else if ($code < 240) $bytesnumber = 3;        //1110xxxx
        else if ($code < 248) $bytesnumber = 4;    //11110xxx
        $codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
        for ($i = 2; $i <= $bytesnumber; $i++) {
            $offset ++;
            $code2 = ord(substr($string, $offset, 1)) - 128;        //10xxxxxx
            $codetemp = $codetemp*64 + $code2;
        }
        $code = $codetemp;
    }
    $offset += 1;
    if ($offset >= strlen($string)) $offset = -1;
    return $code;
}

// source - http://php.net/manual/en/function.chr.php#88611
function unichr($u) {
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}

/* ---- */

var_dump( entities( "&" ) ) . "\n";
var_dump( entities( "<" ) ) . "\n";
var_dump( entities( "
$first = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($m) {
    $char = current($m);
    $utf = iconv('UTF-8', 'UCS-4', $char);
    return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0"));
}, $string);
根据存储的数量执行多字节安全substr()操作 人物

php>$myvariable=array();

php>$myvariable['hello']=mb_substr(“hello world hello world hell可能谢谢你。问题解决了。echo json_encode($output,json_PARTIAL_output_ON_ERROR));修复了json_encode的空白输出。如果有人从谷歌搜索登陆此页面,这可能会很有用。可能谢谢你。问题解决了。echo json_encode($output,JSON_PARTIAL_output_ON_错误);修复了json_encode的空白输出。如果有人从google search登陆此页面,这可能会很有用。好的答案包括解释代码的作用以及如何解决问题,而不仅仅是一堆代码。好的答案包括解释代码的作用以及如何解决问题,而不仅仅是一堆代码。为什么你在写多个答案吗?选择最好的答案并删除任何其他答案。其中一个答案应该比另一个更好,否?并且你仍然应该包含一个解释。为什么你要写多个答案?选择最好的答案并删除任何其他答案。其中一个答案应该比另一个更好,否?并且你仍然应该包含一个解释。
 <meta charset="ISO-8859-1"> 

OR

function entities( $string ) {
    $stringBuilder = "";
    $offset = 0;

    if ( empty( $string ) ) {
        return "";
    }

    while ( $offset >= 0 ) {
        $decValue = ordutf8( $string, $offset );
        $char = unichr($decValue);

        $htmlEntited = htmlentities( $char );
        if( $char != $htmlEntited ){
            $stringBuilder .= $htmlEntited;
        } elseif( $decValue >= 128 ){
            $stringBuilder .= "&#" . $decValue . ";";
        } else {
            $stringBuilder .= $char;
        }
    }

    return $stringBuilder;
}

// source - http://php.net/manual/en/function.ord.php#109812
function ordutf8($string, &$offset) {
    $code = ord(substr($string, $offset,1));
    if ($code >= 128) {        //otherwise 0xxxxxxx
        if ($code < 224) $bytesnumber = 2;                //110xxxxx
        else if ($code < 240) $bytesnumber = 3;        //1110xxxx
        else if ($code < 248) $bytesnumber = 4;    //11110xxx
        $codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
        for ($i = 2; $i <= $bytesnumber; $i++) {
            $offset ++;
            $code2 = ord(substr($string, $offset, 1)) - 128;        //10xxxxxx
            $codetemp = $codetemp*64 + $code2;
        }
        $code = $codetemp;
    }
    $offset += 1;
    if ($offset >= strlen($string)) $offset = -1;
    return $code;
}

// source - http://php.net/manual/en/function.chr.php#88611
function unichr($u) {
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}

/* ---- */

var_dump( entities( "&" ) ) . "\n";
var_dump( entities( "<" ) ) . "\n";
var_dump( entities( "
$first = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($m) {
    $char = current($m);
    $utf = iconv('UTF-8', 'UCS-4', $char);
    return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0"));
}, $string);