PHP/HTML 中的所有特殊字符都是问号

Posted

技术标签:

【中文标题】PHP/HTML 中的所有特殊字符都是问号【英文标题】:All special characters are question marks in PHP/HTML 【发布时间】:2015-05-18 03:28:30 【问题描述】:

php 默认字符集是 UTF-8。 PHP 和 html 中的所有特殊字符都输出为问号,如“?”在浏览器中。所有带有特殊字符的数据都以 UTF-8 格式存储在数据库字段中。但是当 PHP 读取数据库并输出到浏览器时,所有的特殊字符如版权和商标符号都是?

数据不能编码为 htmlentities,否则数据会在浏览器中作为 html 代码输出。数据库中的字段具有 html 标记。这就像一个所见即所得的领域。

另一个类似的问题并没有真正解决问题。我的问题是 php 正在读取以 utf-8 编码的数据库字段,包括 html 标记、文本和特殊字符。然后将数据保存在另一个 utf-8 编码的数据库字段中。但是中间的东西是不对的。该过程完成后,新的mysql列中的特殊字符是?。因此浏览器正在显示?对于所有特殊字符。

$conn = new mysqli($host, $username, $password, $dbName);
mysql_set_charset('utf-8',$conn);


$categoryDescription = utf8_encode(utf8_decode($var['manufacturer_overview']));

【问题讨论】:

HTML 页面不能是 UTF8。检查请求中发送的标头。 UTF-8 encoded html pages show � (questions marks) instead of characters的可能重复 【参考方案1】:

我也遇到过类似的问题

但可能是由于多种原因造成的。

1.检查header是否有

<meta charset="utf-8" />

2.包含特殊字符集的页面只在支持它们的编辑器中打开

3.这就是我的情况

我使用 php 函数 utf8_encode() 将数据保存在数据库中,但也在数据库中在我的执行函数中它已经存在

mysql_set_charset('utf8',$dbSelect);

我的函数是这样的

public function execute($sql,$useDb = 1)
    
        if($useDb == static::LOCAL)
        
            $dbSelect = $this->conexion;
        elseif ($useDb == static::REMOTE) 
        
            $dbSelect = $this->paisConexion;
        
        mysql_set_charset('utf8',$dbSelect);
        $result = mysql_query($sql,$dbSelect) or die("ERROR: Ejecuci&oacute;n de consulta: $sql<br>\n");

        return $result;
    

所以它被编码了两次,我删除了一个,现在它可以正常工作了。

希望这些对你有帮助

谢谢

【讨论】:

嗨,好主意,但对我不起作用。请参阅更新的问题。谢谢 @user2700690 兄弟删除最后一个 ecode 部分并尝试,utf8_encode(utf8_decode 尝试完全删除它并添加标题很可能你已经添加了它。 @user2700690 是的,你是对的,关于已弃用的部分:) 这是新的。 php.net/manual/en/mysqli.set-charset.php 看起来像它的制作过程。代替 ?单独,现在它保存特殊字符加上 Â 在它前面。 知道了!它实际上在新的数据库字段中保存了相同的确切数据。我只是将浏览器编码硬编码为其他内容。它现在工作。神奇!太感谢了!从来没有想过我必须再次强制 mysql 编码。

以上是关于PHP/HTML 中的所有特殊字符都是问号的主要内容,如果未能解决你的问题,请参考以下文章

UTF-8 中的特殊字符在 MYSQL 中使用 magento 存储为带问号的菱形

FreeMarker 特殊字符输出为问号

显示带有问号的菱形等特殊字符的网站

tomcat中的特殊字符[重复]

Activity Schema Android中的特殊字符

使用转义字符输出正确的网址