2010-11-05 46 views
2

在htmlentities中,如何选择性地对符号进行编码,以便它不编码标签的<>,但是编码是&PHP htmlentities

+2

你在说“。:;,!?”吗?如果是这样,你为什么要编码他们?或者你在谈论引号? – thejh 2010-11-05 20:57:18

+1

1.永不使用htmlentities。 2.不要编码'<' and '>','''和引号旁边的任何内容。 – 2010-11-05 20:59:59

+2

这个问题的正确解决方案很可能是“忘记编码实体,并确保您声明您使用的字符编码”:http://www.w3.org/International/O-charset – Quentin 2010-11-05 21:00:13

回答

3

只需使用:

<?php 
$string = str_replace('&', '&amp;', $string); 

参考this约从官方文档str_replace函数的详细信息。

1

尝试这样:

$string = htmlentities($string); 
$string = str_replace(array('&lt;','&gt;'), array('<', '>'), $string); 

在官方文档,htmlentitiesstr_replace

+0

err ...在第二个例子中,你忘记了一个参数 – thejh 2010-11-05 21:05:00

+0

哇,那不得不被编辑..谢谢。 – 2010-11-05 21:16:41

+0

@Col它看起来像原来的帖子想要使用htmlentities编码除< and > – 2010-11-05 21:17:47

2

你没有得到一个“部分编码”选项;如果您想要转义或不转义特定字符,您将不得不手动完成。例如做你说什么你想:

str_replace('&gt;', '>', str_replace('&lt;', '<', htmlentities($s))) 

什么是你想要做的,尽管它?以上看起来不太可能有用。标记中的"字符仍然会被转义,从而损坏属性值。

htmlentities也普遍存在问题,因为除非您专门为它提供正确的字符集参数,否则它会将字符串中的任何非ASCII字符压入错误的HTML实体引用。通常使用htmlspecialchars()会更好,它只影响真正特殊且需要在HTML中转义的少数字符。

如果你想要做的就是跳过&这个字符,你可以用一个简单的str_replace('&', '&amp;', $s)来做到这一点,但是它仍然会取代作为有效实体或字符引用一部分的&符号。你确定要这么做吗?你只是想修复不正确使用的非转义符号吗?如果是这样,你可以尝试一个正则表达式来选择任何使用不是有效的实体/字符引用的&