jsp mysql 转义字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp mysql 转义字符相关的知识,希望对你有一定的参考价值。

public String dohtml(String txt)
if(txt!=null)
txt=replace(txt,"&","&");
txt=replace(txt,"<","<");
txt=replace(txt,">",">");
txt=replace(txt," "," ");
txt=replace(txt,"\n","<br>");
txt=replace(txt,"\t","        ");
txt=replace(txt,"\b","\\b");

return donull(txt);

想用函数将'\n'转换,谁知连自己输入的"\n"也被转换成<br>了
mysql里的\n都是用ASCII表示吗?
怎么解决这个问题?
txt=replace(txt,"<","& a m p ");
txt=replace(txt,">","& g t ;");
txt=replace(txt," ","& n b s p") ;
txt=replace(txt,"\t","& n b s p & n b s p & n b s p & n b s p & n b s p & n b s p & n b s p & n b s p");
注:& n b s p这间的空格是因为他们显示不出来才添加的,本来没有

在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:
\\0
一个 ASCII 0 (NUL) 字符。
\\\'
一个 ASCII 39 单引号 (“\'”) 字符。
\\"
一个 ASCII 34 双引号 (“"”) 字符。
\\b
一个 ASCII 8 退格符。
\\n
一个 ASCII 10 换行符。
\\r
一个 ASCII 13 回车符。
\\t
一个 ASCII 9 制表符(TAB)。
\\z
ASCII(26) (Control-Z)。这个字符可以处理在 Windows 系统中 ASCII(26) 代表一个文件的结束的问题。(当使用 mysql database < filename 时 ASCII(26) 可能会引起问题产生。)
\\\\
一个 ASCII 92 反斜线 (“\\”) 字符。
\\%
一个 ASCII 37 “%” 字符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。查看章节 6.3.2.1 字符串比较函数。
\\_
一个 ASCII 95 “_” 字符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。查看章节 6.3.2.1 字符串比较函数.
注意如果在某些正文环境内使用 “\\%” 或 “\\_”,将返回字符串 “\\%” 和 “\\_” 而不是 “%” 和 “_”。
  字符串中包含引号的可以有下列几种写法:
  一个字符串用单引号“\'”来引用的,该字符串中的单引号“\'”字符可以用“\'\'”方式转义。
一个字符串用双引号“"”来引用的,该字符串中的“"”字符可以用“""”方式转义。
一个字符串用双引号“"”来引用的,该字符串中的单引号“\'”不需要特殊对待而且不必被重复或转义。同理,一个字符串用单引号“\'”来引用的,该字符串中的双引号“"”不需要特殊对待而且不必被重复或转义。
参考技术A 终于解决了~呵呵呵(我是aries_sun即c-aries)
想了三天,每天都搞到我早上两三点才睡,废寝忘食没洗澡^-^

public String doHtml(String str)

if(str==null)
return donull(str);
else
int len=str.length();
StringBuffer sb=new StringBuffer();
char ch;
for(int i=0;i<len;i++)

ch=str.charAt(i);
switch(ch)

case '&': sb.append("&");break;
case '<': sb.append("<");break;
case '>': sb.append(">");break;
case '\n': sb.append("<br>");break;
case '\t': sb.append("        ");break;
case ' ': sb.append(" ");break;
default: sb.append(ch);


return sb.toString();



//刚处理完中文后,存储入数据库的必要操作
public String doSql(String str)
if(str==null)
return donull(str);
else
int len=str.length();
StringBuffer sb=new StringBuffer();
char ch;
for(int i=0;i<len;i++)
ch=str.charAt(i);
switch(ch)
case '\'': sb.append("''");break;
case '\\': sb.append("\\\\");break;
default:sb.append(ch);


return sb.toString();

本回答被提问者采纳

带有 JSP 的 JDBC 连接字符串 SQL Server 导致“非法转义字符”错误

【中文标题】带有 JSP 的 JDBC 连接字符串 SQL Server 导致“非法转义字符”错误【英文标题】:JDBC connection string SQL Server with JSP causes "Illegal escape character" error 【发布时间】:2013-11-23 12:06:40 【问题描述】:

如果我的 SQL Server 2012 的名称是 JOSEAN\REGULUS,我的连接字符串是什么?

"jdbc:sqlserver://JOSEAN\REGULUS;databasename = BD12272"

但是却导致编译错误:

非法转义字符

这是怎么引起的,我该如何解决?

【问题讨论】:

您遇到错误了吗? “没有结果”到底是什么意思? 如果你真的是在 JSP 中这样做,那就……不要。 【参考方案1】:

java documentation 说:

以反斜杠 (\) 开头的字符是转义序列,具有 对编译器的特殊意义。下表显示了 Java 转义序列:

\t此时在文本中插入一个制表符。 \b 此时在文本中插入一个退格键。 \n 此时在文本中插入换行符。 \r 此时在文本中插入回车。 \f 此时在文本中插入换页符。 \' 此时在文本中插入一个单引号字符。 \" 此时在文本中插入双引号字符。 \\ 此时在文本中插入一个反斜杠字符。

您的连接字符串有一个反斜杠,因此 java 需要一个转义序列,而 \R 不是(非法转义字符)。

因此,您必须转义反斜杠,您的连接字符串应如下所示:

"jdbc:sqlserver://JOSEAN\\REGULUS;databasename = BD12272"

【讨论】:

【参考方案2】:

试试这个:

"jdbc:sqlserver://JOSEAN;instanceName=REGULUS;databaseName=BD12272"

【讨论】:

以上是关于jsp mysql 转义字符的主要内容,如果未能解决你的问题,请参考以下文章

转义 JSP/Spring MVC 中的所有字符串

带有 JSP 的 JDBC 连接字符串 SQL Server 导致“非法转义字符”错误

jsp自定义标签处理转义字符

转义字符_MySQL识别下面的转义序列

Mysql like语句转义字符

js,如何防止特殊字符被转义