擅长:python、mysql、java
<p>Ned Batchelder说:</p>
<blockquote>
<p>It's a little dangerous depending on where the string is coming from,
but how about:</p>
<pre><code>>>> s = '\u003cfoo\u003e'
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii')
'<foo>'
</code></pre>
</blockquote>
<p>实际上,这种方法可以像这样安全:</p>
<pre><code>>>> s = '\u003cfoo\u003e'
>>> s_unescaped = eval('u"""'+s.replace('"', r'\"')+'-"""')[:-1]
</code></pre>
<p>注意三引号字符串和短划线在最后三个引号之前。</p>
<ol>
<li>使用带3个引号的字符串将确保如果用户在字符串中输入“\\”(为清晰可见而添加的空格),则不会中断求值器</li>
<li>最后的破折号是故障保护,以防用户的字符串以“\”结尾。在分配结果之前,我们用[:-1]分割插入的破折号</li>
</ol>
<p>因此,只要以原始格式捕获,就不必担心用户输入的内容。</p>