如何在PHP生成的页面上显示编码后的字符串原始值?
没问题,我明白你的需求了——你想让用户看到编码后的实体字符串本身,而非浏览器解码后的内容,同时又不想破坏手动添加的<和>的实体显示效果。
其实你之前的误区在于:浏览器会自动解析HTML实体,直接echo构造好的$userMessage时,里面的<会被解析成<,"会被解析成",这就偏离了你的预期。
解决思路很清晰,核心是让所有HTML实体符号都被浏览器当作纯文本显示,具体可以用两种方法实现:
方法一:对编码后的字符串二次处理,再拼接实体文本
- 先对用户输入做第一次
htmlspecialchars编码(这一步你已经完成); - 对得到的
$encodedString做第二次htmlspecialchars编码,这样里面的"会被转成&quot;; - 拼接你需要的
<和>时,要写成&lt;和&gt;(确保浏览器显示实体本身而非尖括号)。
代码示例:
$userInput = 'My favourite quote: "I can resist everything except temptation."'; $encodedString = htmlspecialchars($userInput); // $encodedString结果:My favourite quote: "I can resist everything except temptation." $doubleEncodedString = htmlspecialchars($encodedString); $userMessage = 'You\'ve entered &lt;' . $doubleEncodedString . '&gt;'; echo $userMessage;
方法二:直接对整个构造好的$userMessage做编码
你担心把$userMessage传入htmlspecialchars会修改自定义的<和>?其实完全不用担心——这个操作会把<转成&lt;,>转成&gt;,正好让浏览器显示实体本身,而非解析成尖括号。
代码示例:
$userInput = 'My favourite quote: "I can resist everything except temptation."'; $encodedString = htmlspecialchars($userInput); $userMessage = 'You\'ve entered <' . $encodedString . '>'; echo htmlspecialchars($userMessage);
两种方法最终都会让用户看到你想要的内容:
You've entered <My favourite quote: "I can resist everything except temptation.">
原理本质是:通过二次编码把所有&符号转成&,让浏览器不再解析后续的实体字符,而是直接显示完整的实体字符串。
内容的提问来源于stack exchange,提问作者jacekn
相关产品推荐
相关产品推荐

