从数据库读取含罗马尼亚字符的JSON显示为问号的问题
解决罗马尼亚特殊字符显示为问号的问题
罗马尼亚特殊字符(Ă、Î、Ș、Ț、Â等)显示成问号,核心原因是编码不统一——从数据库连接、数据存储到页面输出的全流程,必须保持UTF-8(或更全面的utf8mb4)编码一致。以下是具体解决步骤:
第一步:强制数据库连接使用UTF-8编码
建立数据库连接后,立刻执行编码设置语句,确保PHP与数据库之间的传输编码统一。把这行代码放在SQL查询之前:// 面向对象写法 $conn->set_charset('utf8mb4'); // 或mysqli扩展过程式写法 // mysqli_set_charset($conn, 'utf8mb4');注:utf8mb4比标准utf8支持更多特殊字符,更适合存储包含罗马尼亚语的内容。
第二步:检查数据库、表及字段的编码
确保存储JSON的form_submission表、data字段的编码为utf8mb4,排序规则可选择utf8mb4_romanian_ci(专门适配罗马尼亚语)或utf8mb4_unicode_ci。如果编码不对,可执行以下SQL修改:-- 修改表编码 ALTER TABLE form_submission CHARACTER SET utf8mb4 COLLATE utf8mb4_romanian_ci; -- 修改data字段编码 ALTER TABLE form_submission MODIFY COLUMN data TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_romanian_ci;第三步:提前设置页面响应编码
把header('Content-Type: text/html; charset=utf-8');移到脚本最开头,避免因提前输出内容导致header设置失效:<?php header('Content-Type: text/html; charset=utf-8'); // 后续是数据库连接、查询代码...第四步:优化JSON解码(可选)
给json_decode加上JSON_UNESCAPED_UNICODE参数,确保特殊字符直接输出,无需转义:$data = json_decode($row["data"], true, 512, JSON_UNESCAPED_UNICODE);
修改后的完整PHP代码示例
<?php // 提前设置页面编码 header('Content-Type: text/html; charset=utf-8'); // 此处替换为你的数据库连接代码 // $conn = new mysqli($servername, $username, $password, $dbname); // 设置数据库连接编码 $conn->set_charset('utf8mb4'); $sql = "SELECT data FROM form_submission"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo "<table>"; echo "<tr><th>Text 1</th><th>Text 2</th><th>Select List 1</th><th>Text 3</th><th>Text 4</th><th>Date 1</th><th>Email 1</th><th>Matrix 1 0</th><th>Matrix 1 1</th><th>Matrix 2 0</th><th>Matrix 2 1</th></tr>"; while($row = $result->fetch_assoc()) { $data = json_decode($row["data"], true, 512, JSON_UNESCAPED_UNICODE); echo "<tr>"; echo "<td>" . $data["text_1"] . "</td>"; echo "<td>" . $data["text_2"] . "</td>"; echo "<td>" . implode(", ", $data["selectlist_1"]) . "</td>"; echo "<td>" . $data["text_3"] . "</td>"; echo "<td>" . $data["text_4"] . "</td>"; echo "<td>" . $data["date_1"] . "</td>"; echo "<td>" . $data["email_1"] . "</td>"; echo "<td>" . $data["matrix_1_0"] . "</td>"; echo "<td>" . $data["matrix_1_1"] . "</td>"; echo "<td>" . $data["matrix_2_0"] . "</td>"; echo "<td>" . $data["matrix_2_1"] . "</td>"; echo "</tr>"; } echo "</table>"; } ?>
内容的提问来源于stack exchange,提问作者user3555881
相关产品推荐
相关产品推荐

