PHP 删除数据库输出中的 Â

PHP get rid of  in database output

我目前正在研究一个正则表达式来替换空的 HTML 元素。但是,数据库中的字符串包含隐藏字符。例如,在数据库中我复制了这个字符串:

<h3> </h3>

当我遍历它并使用 ord 将每个字符转换为整数时,我得到以下输出:

< => 60
h => 104
3 => 51
> => 62
=> 32
< => 60
/ => 47
h => 104
3 => 51
> => 62

但是,当我从数据库中读取它并直接将其放入变量时,我得到以下输出:

< => 60
h => 104
3 => 51
> => 62
� => 194
� => 160
< => 60
/ => 47
h => 104
3 => 51
> => 62

我知道 160 是不间断的 space,所以我知道这可能是正确的。但是我不明白的是为什么我得到一个额外的字符 194(根据 google)。

我怎样才能摆脱我得到的 Â?不间断的 space 是可以理解的,但我不明白 Â。

更新:

数据库中的数据存储为utf8_general_ci。我将 PDO 连接中的字符集设置为 utf8.

更新2:

我很好奇为什么我的开头是 Â (char 194)。根据我的光标,数据库中

之间有一个字符。

我想删除 <h3>[ONLY SPACES]</h3> 但因为它包含随机字符 194 我无法用正则表达式正确替换它,因为 194 不是 space.

在循环中使用 php iconv 函数替换来自 db

的特殊字符

$text = "This is the Euro symbol '€'."; $op = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;

you can send the text to specific function mentioned below


function ConvertToUTF8($text){

    $encoding = mb_detect_encoding($text, mb_detect_order(), false);

    if($encoding == "UTF-8")
    {
        $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');    
    }


    $out = iconv(mb_detect_encoding($text, mb_detect_order(), false), "UTF-8//IGNORE", $text);


    return $out;
}

PHP 的 ord() 函数,就像所有主要的内置函数一样,对字符编码一无所知,它只是将字符串视为一系列字节。它所做的只是查看字符串的单个字节,并以 0 到 256 之间的数字形式告诉您该字节的值。

但是,您的文本是 UTF-8 格式的,其中有些字符占用超过一个字节;因此,当您一次查看一个字节时,任何大于 127 的数字实际上 较长序列的一部分 。所以,没有“”。

真正存在的是字节序列“194, 160”;或者用十六进制表示"C2 A0"。如果您在 conversion tool such as this one 中查找它,您会发现 UTF-8 中的字节序列表示 Unicode 代码点 A0 或 160,您已经发现它是一个不间断的 space。

就是这样:您的字符串已正确编码,但包含一个您没有看到的字符,因为它是 space.

的一种特殊类型