·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

[X3.5教程] discuz3.4 GBK 特殊字符乱码 解决方法 支持最新版本DZ3.4

656 2
发表于 2022-11-21 22:10:00 | 查看全部 阅读模式 | Google Chrome | Windows 10

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×


discuz 3.4 gbk版本 你会发现复制,转载,发帖特殊字符和日文韩文等等的时候...可能会乱码!!类似X`*3!221%$# ......在网上找了很多方法 我自己也是小白

站长也发了一个类似的帖子 可是我用了进不了网站: https://www.dz-x.net/t/19815/1/1.html  可能是版本老了的问题吧!!
经过一天研究 找资料 终于弄好了!!!


  这个是我最新修改的完整代码:
Discuz! X3.4 R20220811版本!!!
  1.   $string = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string);
  2. if(strpos($string, '&amp;#') !== false) {
  3. $string = preg_replace('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string);
  4. }
复制代码
这样  GBK版本用了特殊字符和外文就不会乱码了!!!
为了让像我这样的 新手 无法解决困难 我直接分享 傻瓜文件直接替换就可以了!!顺便赚点小金币!象征性收1金币!!


discuz3.4 GBK 特殊字符乱码 解决方法 支持最新版本DZ3.4 特殊,特殊字符,字符,乱码,解决 function_core.rar (18.47 KB, 下载次数: 2, 售价: 1 下载币)



我要说一句 收起回复

评论2

wordos楼主Lv.2 发表于 2022-11-21 22:20:50 | 查看全部 | Google Chrome | Windows 10
ε≡٩(๑>₃<)۶ 测试特殊字符   发帖的时候用这个字符测试 是否成功!!  UTF版本dz原生就兼容特殊字符 兼容性应该就是最好的! 但是如果是采集站和数据量大 正对华人地区 GBK可以节省至少50%的数据库容量 自行取舍
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-17 02:19:00 | 查看全部
感谢你分享的解决方案!对于Discuz! X3.4 GBK版本的特殊字符乱码问题,你提供的代码确实是一个有效的解决方法。以下是对你提供的代码的详细解释和优化建议:

### 代码解释:
1. **`str_replace` 函数**:
   - 这个函数用于替换字符串中的特定字符。你在这里将 `&`、`"`、`<`、`>` 替换为它们的HTML实体编码形式,分别是 `&amp;`、`&quot;`、`&lt;`、`&gt;`。
   - 这样可以确保这些特殊字符在HTML中正确显示,而不会导致乱码。

2. **`preg_replace` 函数**:
   - 这个函数用于正则表达式替换。你在这里处理了类似 `&#123;` 或 `&#x1234;` 这样的HTML实体编码。
   - 正则表达式 `/&amp;((#(\d{3,5}|x{4}));)/` 匹配 `&amp;#` 开头的实体编码,并将其替换为 `&#` 开头的形式,确保这些编码能够正确解析。

### 优化建议:
1. **代码优化**:
   - 你提供的代码已经非常简洁有效,但可以稍微优化一下,使其更具可读性和可维护性。例如,可以将 `str_replace` 和 `preg_replace` 分开处理,避免混淆。

2. **文件替换**:
   - 你提到可以直接替换文件,建议在替换之前备份原文件,以防出现问题。替换的文件通常是 `source/class/class_core.php` 或 `source/function/function_core.php`,具体取决于你修改的内容。

3. **测试**:
   - 在替换文件后,建议进行全面的测试,确保所有功能正常,特别是涉及到特殊字符和外语的部分。

### 完整代码示例:
  1. // 替换特殊字符为HTML实体编码
  2. $string = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string);

  3. // 处理HTML实体编码
  4. if (strpos($string, '&amp;#') !== false) {
  5.     $string = preg_replace('/&amp;((#(\d{3,5}|x{4}));)/', '&\\1', $string);
  6. }
复制代码


### 注意事项:
- **备份**:在进行任何文件替换之前,请务必备份原文件,以防出现问题。
- **测试**:替换后,请确保进行全面的测试,特别是涉及到特殊字符和外语的部分。
- **版本兼容性**:虽然你提供的代码适用于Discuz! X3.4 R20220811版本,但在其他版本中可能需要适当调整。

希望这些信息对你和其他站长有所帮助!如果你有其他问题或需要进一步的帮助,请随时提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.224.212.19,GMT+8, 2025-3-31 16:50 , Processed in 0.562707 second(s), 125 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表