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ó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 中的所有特殊字符都是问号的主要内容,如果未能解决你的问题,请参考以下文章