使用rawurlencode / rawurldecode编码/解码textarea值

时间:2010-12-04 20:12:38

标签: php textarea urldecode

在使用带rawurlencode函数的PHP存储到mysql之前对textarea的换行符进行编码时,将换行符编码为%0D%0A

例如: 用户输入的textarea文本:

a
b

使用rawurlencode编码并存储到数据库中将值存储为a%0D%0Ab

从数据库检索并使用rawurldecode解码时不起作用,代码会出错。如何克服这种情况,以及存储,检索和显示textarea值的最佳方法是什么。

3 个答案:

答案 0 :(得分:1)

首先可以使用base64_encode对此textarea字符串进行编码,然后对其执行base64_decode,如果以上内容对您不起作用。

如果textarea不包含网址,您应该使用base64_encode然后使用rawurlencode,然后照常存储。

答案 1 :(得分:1)

您不应该使用rawurlencode来转义数据库的数据

每种目标格式都有自己的转义方法,一般来说,它确保从一个地方安全地存储/显示/传输,另一端不需要解码

例如:

  • 以HTML格式显示文字,使用htmlentities或htmlspecialchars
  • 存储在数据库中,使用mysqli_real_escape_string,pg_escape_string等...
  • 传输variablename,使用urlencode
  • 传输variablecontent,使用rawurlencode
  • 等...

您应该注意到解码这些内容通常由浏览器/数据库完成。因此,实际上没有数据存储转义。并且您的代码不需要解码。

问题可能是因为您使用rawurlencode转义序列,但您的数据库需要特定品牌数据库的转义格式。并使用这个假设来解除它,这是错误的,这搞砸了你的字符串。

结论:找出您正在使用的品牌数据库,查找该数据库的特定转义函数,并在所有您的内容“transferral”上使用正确的转义函数。


P.S。:某些定义可能不正确,请对此发表评论。我想让这个想法坚持下去,但可能没有使用所有合适的条款。

答案 2 :(得分:0)

首先,通过urlencode()运行textarea非常罕见 urlencode不是为此而设计的。

其次,如果您仍想这样做,那么问题可能来自数据库。首先,您需要告诉我们您使用的数据库以及用于存储此数据的TYPE:您将其存储为TEXT还是BINARY数据?你在数据库中设置了正确的字符集吗?

相关问题