PHP:如何将含&的变量输出为&?htmlspecialchars无效
嘿,我来帮你搞定这两个PHP相关的问题!
1. 如何在PHP中将&符号转换为HTML实体
在PHP里,有两个常用函数可以完成这个转换,具体看你的需求:
htmlspecialchars():这是最常用的方案,它会把HTML里的特殊字符(包括&、<、>、"、')转换成对应的实体。对于&来说,它会被转成&。
示例代码:$original = "Apples & Oranges"; $converted = htmlspecialchars($original); echo $converted; // 输出:Apples & Oranges你还可以通过第二个参数指定转换规则,比如
ENT_QUOTES会同时转义单引号和双引号,ENT_COMPAT只转双引号(默认行为)。htmlentities():这个函数会转换更多类型的HTML实体,包括带重音的非ASCII特殊字符。如果你的字符串里有这类特殊字符,用它会更合适,它同样会把&转成&。
示例代码:$original = "Café & Cake"; $converted = htmlentities($original, ENT_COMPAT, 'UTF-8'); echo $converted; // 输出:Café & Cake
2. 解决特定变量的输出需求:将&转为&amp;
你提到变量$description = "Gun Stock Sealer & Filler",想要echo输出成Gun Stock Sealer &amp; Filler,但用htmlspecialchars没达到效果?大概率是你可能误解了函数的作用,或者参数使用不对。其实只需要对这个变量再做一次HTML特殊字符转义就可以了!
因为你的变量里已经包含了字符串形式的&,当你用htmlspecialchars处理时,它会把这个子串里的&再次转成&,这样原来的&就变成了&amp;,正好是你想要的结果。
示例代码:
$description = "Gun Stock Sealer & Filler"; // 用htmlspecialchars处理一次 echo htmlspecialchars($description); // 输出结果:Gun Stock Sealer &amp; Filler
如果还是不行,你可以检查一下是不是变量的实际内容和你想的不一样——比如是不是变量已经被html_entity_decode处理过,导致里面的&变成了实际的&?如果是这种情况,那你需要调用两次htmlspecialchars:
// 假设变量实际是"Gun Stock Sealer & Filler" $description = "Gun Stock Sealer & Filler"; // 第一次转成&,第二次转成&amp; echo htmlspecialchars(htmlspecialchars($description));
这样就能得到你想要的输出啦!
内容的提问来源于stack exchange,提问作者Navruz Madibragimov

