某次,为了提高网站文章的SEO搜索效率,决定将文章标题放入URL中,本来以为是一件傻瓜式操作的事情,不过还是遇到了一些问题:

  1. 标题作为复杂字符串,某些字符需要转义,我使用了如下方式:
title.replaceAll("/","_").replaceAll(" ","").replaceAll("%","");

第一个replaceAll,因为修改后的URL格式为:

@RequestMapping("/index/{id}/{title}")

如果title中有"/",会导致后台接收不到请求;
第二个replaceAll,将标题中所有空格删除;
第三个replaceAll,若URL中有"%",会让请求失效;
另外,为了兼容曾经的请求,对曾经的请求格式做了一次重定向:

@RequestMapping("/index")
public String index(Integer id){// 创建titlereturn "redirect:/index"+id+"/"+title;
}

此时发现,若title中含有"[",又会导致请求失效(Model has no value for key '['),于是加上了如下代码:

title.replaceAll("\\[","");

不过故事还没到头。为了再虐自己一次,把键盘上所有的字符都拼在一起,再加点汉字,组成了一个怪异标题:

String title="中国Refwin~`!@#$%^&*()_-+={[}]|\"':;<,>.?//*/.+- %%WRA President123";

果然,在访问页面时又打不开了,两个原因:
(1)重定向时中文会出现乱码,需要使用URLEncoder对其进行utf-8的编码;
(2)title中的""阻止了正常的重定向。
干脆,放弃一个个字符的替换,使用正则表达式(对除了字母数字下划线、汉字及一些可用字符之外的字符进行替换):

String title=title.replaceAll("[^\\w一-龥~`!@#$%^&*()\\-+={}\\[\\]|\"':;<,>.?*.+]", "");
return "redirect:/index"+id+"/"+URLEncoder.encode(title,"utf-8");
  1. 标题过长,可能影响请求效果;
  2. 在做牵涉范围较广,比如这种路由规则的修改时,需要提前调研好哪些请求会被影响到,并做好兼容措施。

记将title(复杂字符串)放入URL时遇到的一些问题(`Model has no value for key ‘[‘`;重定向;中文乱码;URLEncoder;正则替换)相关推荐

  1. python字符串放入列表_python字符串与列表

    字符串的内置函数,感觉会用的很方便: image.png image.png image.png image.png 判断字符串是否包含数字和字母 print('abc123'.isalnum()) ...

  2. c语言-字符串放入字符数组

    用字符串指针将字符串存入字符数组中 #include <stdio.h>int main(char argc, char *argv[]) {int i = 0;int j = 0;cha ...

  3. php substr_replace 中文乱码,php substr_replace替换字符串一些实例_PHP教程

    substr_replace与str_replace有一点像就是直接把字符串替换一部份了,下面小编来给各位同学介绍一下 操作方法. substr_replace() 函数把字符串的一部分替换为另一个字 ...

  4. jpg图片无损放入PDF的程序,PDF文件格式分析,图像表达方式

    wxleasyland@139.com 用打印的方式,一般是将JPG解码后的数据发给打印机,而不是JPG原始数据,所以PDF打印机会重新压缩. 不对JPG图像进行解压,直接将JPG图像传送到虚拟打印机 ...

  5. MFC 如何将DWORD类型转换成CString放入ListBox中

    问题来源描述:这个问题是我在用MFC写内存修改器的时候碰见的,我有一个DWORD[ ]类型,如何将它转成字符串放入ListBox中呢? 解决这一问题需要用到Format函数,这个函数是CString中 ...

  6. 向海康大华播放器放入数据,一会就提示buffer满的原因

    在使用海康大华播放器进行视频解码,往往通过网络SDK接收到网络流,然后再将数据向播放器input,但是可能一会播放器就会提示已满的错误信息(当然这里不是只放不取的). 这些播放器通常有播放倍速,默认是 ...

  7. OC--有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 倒序输出字符串...

    有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 1 NSInteger num=123456789; 2 NSString *str=[[NSStri ...

  8. 函数 —— strtok() 例如:按照字符拆分字符串,放入新定义的数组中;按照字符拆分字符串,放入原先的数组中

    问题描述: 原始数组:char str[80] = "This is - aa bb - cc - dd"; 新定义的数组:     char newstr[80]=  {0}; ...

  9. char N2Char(int n)函数:将一个整数转换为字符串,并放入一个字符串中

    //将一个整数转换为字符串,并放入一个字符串中 char N2Char(int n)//一次只能转换一个数 {int i;char c;if ((i = n / 10) != 0)N2Char(i); ...

最新文章

  1. 那么辛苦努力的工作,却换来了一身的不是
  2. bmp类型转成Halcon的Hobject类型
  3. 波士顿动力机器狗测评来了!售价堪比豪车,避障、导航、舞蹈样样都行,买不起还能租...
  4. 创建预留mb21添加附加字段的增强
  5. 【励志】高考失利之后,属于我的大学本科四年
  6. 截屏工具Snipaste使用指南
  7. 7.定义一个有80个元素的字符数组,从键盘输入一串字符,将其中的大写字母转换为小写字母,而将原来为小写的字母转换为大写字母,其他字符不变。
  8. (旧)走遍美国——(三、文化4)
  9. saxbuilder用法(转)
  10. 修改jquery文件上传插件uploadify的英文为中文
  11. Unix/Linux 目录结构的来历
  12. 什么叫侧面指纹识别_屏幕指纹技术最强的3款全面屏手机,指纹识别技术手机你喜欢吗?...
  13. 【读书笔记】iOS-简单的数据驱动程序
  14. Laravel的CURD操作
  15. 手撸CAPL(二)——OSEK网络管理N个节点建环机制(包含节点建环/丢失/跳过等)代码自取
  16. 2021年程序员平均工资
  17. 关于手机上的卫星定位
  18. 常用元器件的识别(转载)
  19. 2020:可视化的视觉问答LRTA: A Transparent Neural-Symbolic Reasoning Framework with Modular Supervision
  20. 全国计算机等级考试证书电子,全国计算机等级考试证书效力

热门文章

  1. Flutter中的Provider(八)-多个Provider-MultiProvider
  2. 常见嵌入式硬件部分面试题总结
  3. 编写各种outofmemory/stackoverflow程序
  4. m-序列简述及其相关性质
  5. deepin linux 安装Clion 以及系统配置
  6. hcna学习小结第一天
  7. 计算机系统要素-Project1实操笔记
  8. 惠普打印机驱动服务器系统安装教程,Hp打印机驱动怎么安装,详细图文版教程...
  9. 预告:年度乘用车前装超声波雷达市场,哪些供应商表现抢眼
  10. 树的结点?结点的度?