Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将一些字符计算为3个字符_Php_String_Utf 8_Special Characters - Fatal编程技术网

PHP将一些字符计算为3个字符

PHP将一些字符计算为3个字符,php,string,utf-8,special-characters,Php,String,Utf 8,Special Characters,我试图在特殊字符之间插入文本,但问题是php出于未知原因将一些特殊字符解释为3个字符。例如,如果要对以下任何符号使用strlen(),它将返回3: ➊➜❚✶➪ 因此,我需要一种方法来找出如何在字符串的每个特殊字符之间添加内容。例如,如果字符串为: TE➊➜❚S✶T➪ 理想的输出是: |T|E|➊|➜|❚|S|✶|T|➪| 我试过使用这个: <?php $string = 'TE➊➜❚S✶T➪'; $array = str_split($string); foreach ($array

我试图在特殊字符之间插入文本,但问题是php出于未知原因将一些特殊字符解释为3个字符。例如,如果要对以下任何符号使用
strlen()
,它将返回3:

➊➜❚✶➪
因此,我需要一种方法来找出如何在字符串的每个特殊字符之间添加内容。例如,如果字符串为:

TE➊➜❚S✶T➪
理想的输出是:

|T|E|➊|➜|❚|S|✶|T|➪|
我试过使用这个:

<?php
$string = 'TE➊➜❚S✶T➪';
$array = str_split($string);
foreach ($array as $char) {
    $newstring .= '|'.$char;
}
$newstring .= '|';
echo $newstring;
?>
因此,它正在改变如下符号:

|T|E|â|ž|Š|â|ž|œ|â||š|S|â|œ|¶|T|â|ž|ª|
➊ => ➊
➜ => âžœ
❚ => âš
✶ => ✶
➪ => ➪
并将每个字符设置为数组的一个元素

问题:在拆分每个字符的字符串时,有没有办法将这些符号计算为一个字符,以便在其中插入一些内容

我所尝试的:

  • UTF-8编码
  • 不带BOM的UTF-8编码
  • 使用
    htmlspecialchars()
  • 使用
    htmlspecialchars\u decode()
  • 使用
    htmlentities()
  • 使用
    html\u entity\u decode()
  • 所有这些都没有改变。
    有没有办法做到这一点?谢谢。

    使用这些功能,告诉它您正在使用UTF-8。此外,
    htmlspecialchars()
    等还有一个字符集参数:如果您没有使用ISO-8859-1,并且您的PHP版本低于5.4,则必须将其设置为正确的版本。

    该函数仅适用于单字节字符串。如果需要拆分多字节字符串,请与
    u
    修饰符一起使用

    替换

    $array = str_split($string);
    


    缺少的一件事是将数组连接到您喜欢的适当字符串中。因此,您可以进行此更改以获得所需的字符串

    $array = preg_split('//u', $s);
    print_r($array);
    $ss = implode('|', $array);
    

    是的,我使用的是UTF-8,没有默认为UTF-8吗?这取决于我现在看到的版本:“如果省略,这个参数的默认值在5.4.0之前的PHP版本中是ISO-8859-1,从5.4.0以后的PHP版本中是UTF-8。”我很高兴默认值已经改变,但我认识的大多数人仍然使用5.3。你用的是什么版本?不知道默认更改的BTW,所以感谢您让我检查;)哦,是5.2.17。我明白了。我知道出于某种原因,在这里这么说可能会让人泄气。。。但是谢谢你的帮助。这非常有效,但是你介意解释一下它为什么有效吗?=>
    /u
    =>utf-8模式=>可以理解多字节。谢谢你,但这就是问题中原始代码中的
    foreach
    的目的。问题是一个字符被分成三个。提示:以
    html…
    开头的函数设计用于处理html。如果纯文本存在编码问题,它们几乎不会有帮助。整个页面处理HTML。它接受用户输入并对其执行一些php操作,然后输出新文本。我真诚地认为,将
    转换为
    将破坏您的应用程序。该网站实际上并不是在每个字符之间添加
    。我需要的真正结果是一个字符数组,以便进行比较。这个例子只是让我们更容易理解这个问题。另外,我刚刚尝试了
    ,它工作得很好,但我不明白为什么会破坏它。没关系。。。我看到人们总是用他们并不真正理解的随机函数破坏他们的输入数据(
    addslashes()
    strip\u tags()
    是最流行的)。我只是想阻止你那样做。对不起,我的解释不够好。
    $array = preg_split('//u', $s);
    print_r($array);
    $ss = implode('|', $array);