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.
的一种特殊类型
我目前正在研究一个正则表达式来替换空的 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.
的一种特殊类型