You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写PHP if语句判断字符串首字符是否为智能引号

问题根源

  1. 你判断的"是普通直双引号的HTML实体,和智能引号完全是两个不同字符,判断逻辑自然不生效。智能左双引号的Unicode编码为U+201C,是多字节UTF-8字符。
  2. 直接用$bookTitle[0]取首字符是单字节读取逻辑,UTF-8下智能引号占3个字节,直接取下标0只会拿到第一个字节的乱码,不可能匹配成功。

解决方法

  1. 先确认全链路编码统一为UTF-8:数据库表编码用utf8mb4、PHP源文件本身保存为UTF-8无BOM格式、页面输出头声明Content-Type: text/html; charset=utf-8,先解决输出乱码问题。
  2. 用多字节安全的mb_substr函数取首字符,避免单字节读取导致的乱码。
  3. 匹配目标改为智能引号的实际值,为了避免源文件编码导致的字符识别问题,推荐直接用Unicode转义写法。

修正后的代码如下:

<?php
// 确保mbstring扩展已启用,绝大多数PHP环境默认开启该扩展
$firstChar = mb_substr($bookTitle, 0, 1, 'UTF-8');
// 同时匹配左、右智能双引号,如有单智能引号匹配需求可自行追加判断条件
if ($firstChar === "\u{201C}" || $firstChar === "\u{201D}") {
    echo $Parsedown->text($bookTitle . ' ' . $bookSubtitle);
} else {
    echo '<em>' . $Parsedown->text($bookTitle . ' ' . $bookSubtitle) . '</em>';
}
?>

如果你的数据库中存储的是转义后的智能引号HTML实体,只需要把判断条件换成&ldquo;和&rdquo;即可。

内容的提问来源于stack exchange,提问作者gigaboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:39:02