Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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摆脱Â;在数据库输出中_Php_Special Characters - Fatal编程技术网

PHP摆脱Â;在数据库输出中

PHP摆脱Â;在数据库输出中,php,special-characters,Php,Special Characters,我目前正在使用正则表达式替换空的HTML元素。但是,数据库中的字符串包含隐藏字符。例如,在数据库中复制以下字符串: <h3> </h3> 但是,当我从数据库中读取它并将其直接放入变量中时,我会得到以下输出: < => 60 h => 104 3 => 51 > => 62 => 32 < => 60 / => 47 h => 104 3 => 51 > => 62 < =>

我目前正在使用正则表达式替换空的HTML元素。但是,数据库中的字符串包含隐藏字符。例如,在数据库中复制以下字符串:

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

< => 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
<=>60
h=>104
3 => 51
> => 62
� => 194
� => 160
< => 60
/ => 47
h=>104
3 => 51
> => 62
我知道160是一个不间断的空间,所以我知道这可能是正确的。然而,我没有得到的是为什么我得到一个额外的字符194(这是根据谷歌)

我怎样才能摆脱我得到的东西?不间断的空间是可以理解的,但我不明白

更新:

数据库中的数据存储为utf8\u general\u ci。我将PDO连接中的字符集设置为utf8

更新2:

我很好奇为什么我一开始就得到一个字符(字符194)。在和之间的数据库中,根据我的光标有一个字符


我想删除
[仅空格]
,但因为它包含一个随机字符194,我无法用正则表达式正确替换它,因为194不是空格。

使用循环中的php iconv函数替换db中的特殊字符

$text=“这是欧元符号'€'”;
$op=iconv(“UTF-8”、“ISO-8859-1//Translatit”,$text),PHP_EOL

在循环中使用php iconv函数替换db中的特殊字符

$text=“这是欧元符号'€'”; $op=iconv(“UTF-8”、“ISO-8859-1//Translatit”,$text),PHP_EOL

PHP的
ord()
函数与所有主要内置功能一样,对字符编码一无所知,它只将字符串视为一系列字节。它所做的只是查看字符串的一个字节,然后告诉您该字节的值是一个介于0和256之间的数字

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

真正的是字节序列“194160”;或以十六进制“C2 A0”表示。如果在a中查找,您将看到UTF-8中的字节序列表示Unicode代码点A0或160,您已经发现这是一个不间断的空格

就是这样:您的字符串已正确编码,但包含一个您没有看到的字符,因为它是一种特殊类型的空格。

PHP的
ord()
函数与所有主要内置功能一样,对字符编码一无所知,只将字符串视为一系列字节。它所做的只是查看字符串的一个字节,然后告诉您该字节的值是一个介于0和256之间的数字

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

真正的是字节序列“194160”;或以十六进制“C2 A0”表示。如果在a中查找,您将看到UTF-8中的字节序列表示Unicode代码点A0或160,您已经发现这是一个不间断的空格



就是这样:您的字符串编码正确,但包含一个您没有看到的字符,因为它是一种特殊类型的空格。

请提供更多详细信息。如何在数据库中存储值以及如何读取值?(字符集、排序规则等)。看起来像是“数据库中的数据存储为utf8\u general\u ci。我将PDO连接中的字符集设置为utf8。”-好的,关于HTTP头,
头('Content-Type:text/html;charset=utf-8')
?没有改变,它仍然会给我一个答案。请提供更多详细信息。如何在数据库中存储值以及如何读取值?(字符集、排序规则等)。看起来像“数据库中的数据存储为utf8\u general\u ci。我将PDO连接中的字符集设置为utf8。”-好的,关于HTTP头,
头('Content-Type:text/html;charset=utf-8')
没有改变,它仍然会给我一个提示,我尝试使用
iconv
函数回显字符,但是这会给我一些错误:
Notice:iconv():在输入字符串中检测到一个不完整的多字节字符,用于194和
Notice:iconv():在输入字符串中检测到非法字符160@JoshuaBakker您正在输入字符串的一个字节,它正确地告诉您需要同时使用两个字节才能将它们解释为UTF-8。我尝试使用
iconv
函数回显字符,但是,这给了我一些错误:
注意:iconv():在194的输入字符串中检测到不完整的多字节字符
,以及
注意:iconv():在194的输入字符串中检测到非法字符
160@JoshuaBakker您正在输入字符串的
iconv
一个字节,它非常正确地告诉您需要同时使用两个字节才能将它们解释为UTF-8。现在它将194转换为“?”我认为这在linux环境中不起作用,因此您可以使用str_替换(array(“ā”,“ī”)、array(“a”,“I”)、your text here);我正在使用Windows。而这些角色并不存在。例如,在数据库中,不会显示为。它不应该添加任何东西。现在它返回194个转换为“?”的字符,我认为这在linux环境下不起作用,所以您可以使用str_替换(数组(“ā”,“ī”)、数组(“a”,“I”)、“您的文本在此”);我正在使用Windows。而这些角色并不存在。例如,在数据库中,不会显示为。它不应该增加什么。那么194和160的组合是一个不间断的空间?那么我该如何将其包含在正则表达式中呢?@Joshuabaker是的。正则表达式最好留给一个单独的问题,您可以通过搜索“phputf8正则表达式”或类似的内容来找到答案。我相信
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;
}