在本文中,我们将详细介绍php-带有空格和特殊字符的URL的最佳做法的各个方面,并为您提供关于php空格符号的相关解答,同时,我们也将为您带来关于.htaccessurl中带有特殊字符的有关问题、03
在本文中,我们将详细介绍php-带有空格和特殊字符的URL的最佳做法的各个方面,并为您提供关于php空格符号的相关解答,同时,我们也将为您带来关于.htaccess url中带有特殊字符的有关问题、033 Url中特殊字符的处理、Android EditText禁止输入空格和特殊字符、Azure数据资源管理器-具有空格/特殊字符的外部表分区的有用知识。
本文目录一览:- php-带有空格和特殊字符的URL的最佳做法(php空格符号)
- .htaccess url中带有特殊字符的有关问题
- 033 Url中特殊字符的处理
- Android EditText禁止输入空格和特殊字符
- Azure数据资源管理器-具有空格/特殊字符的外部表分区
php-带有空格和特殊字符的URL的最佳做法(php空格符号)
我目前正在修改一个小型Web应用程序.该Web应用程序允许用户自己输入/指定类别.我注意到在数据库中,有很多类别包含空格和特殊字符,例如Cakes&纸杯蛋糕.
在前端,数据库以URL链接的形式显示所有用户定义的类别,用户可以单击它们以进一步查看类别中的内容.
前端类别链接是使用rawurlencode函数编码的,看起来像这样.
./show.PHP?category=<?PHP echo rawurlencode($e['category']); ?>
在后端,一个函数将获取URL,然后将其解码,然后再将其发送到数据库进行查询.
$category = rawurldecode(htmlspecialchars_decode($category));
它工作正常,但似乎有些“最后一刻”和“过分复杂”.
因此,我想知道,PHP中URL特殊字符和空格的最佳实践是什么?
先感谢您.
解决方法:
我更喜欢使用“弹头”方法.您可以将字符串“塞子化”,并在URL中使用塞子.
http://sourcecookbook.com/en/recipes/8/function-to-slugify-strings-in-php
您需要在数据库中为该段添加一个列,但是您可以轻松地在url中表示用户输入字段并使它们可读. “ function-to-slugify-strings-in-PHP”是一个词条,最初看起来像是“在PHP中对字符串进行子链化的功能”.
.htaccess url中带有特殊字符的有关问题
.htaccess url中带有特殊字符的问题
RewriteRule ^(r|R)(e|E)(g|G)/step2/(.*)/?$ do.php?ac=6a538ae003e30eacbd5b0c1f1d18aa50&op=active&hash=$4
偶在.htacess文件中定义上面的规则,希望
http://127.0.0.1/reg/step2/3635DBp6n66a0oRy3cvN3OvtCoPu5I2gJU2S8MyQLppdkp4wma6wjjaTBSYp%2FT189%2BJz能被解析为
http://127.0.0.1/do.php?ac=6a538ae003e30eacbd5b0c1f1d18aa50&op=active&hash=3635DBp6n66a0oRy3cvN3OvtCoPu5I2gJU2S8MyQLppdkp4wma6wjjaTBSYp%2FT189%2BJz
现在运行的时候好像有点问题,hash参数中带有特殊符号,无法正确解析,提示Object not found!
如果直接输入http://127.0.0.1/reg/step2/3635DBp6n66a0oRy3cvN3OvtCoPu5I2gJU2S8MyQLppdkp4wma6wjjaTBSYp/T189+Jz(即/和+等特殊符号不经过urlencode)可以解析,但是这样一来,hash中的参数无法还原成原来的参数。(hash参数中有2个值经过一个自定义函数加密传递,调用解码函数可以还原其中的2个值)
------解决方案--------------------
urlencode()
接收数据后 urldecode() 再调用你的解密函数
------解决方案--------------------
^(r|R)(e|E)(g|G)/ 何必这样。直接[NC]
------解决方案--------------------
实在不行 就
$url = ''xxx'';
$url = urlencode(str_replace(''/'',''!'',$url));
..........
接收数据的时候
$url = urldecode(str_replace(''!'',''/'',$url));
033 Url中特殊字符的处理
在url跳转页面的时候,参数值中的#不见了,一直没有处理,今天有空看了一下,后来发现后台的过滤器之类的都没有处理,就比较奇怪了,原来是特殊字符的问题。
一:Url中的特殊字符
1.说明
这里还是需要做到一个眼熟的,遇到的时候可以快速定位到。
具体现象就是 用URL传参数的时候,用&符号连接,如果某一个参数中含"#$ ^ & * + ="这些符号的时候,在另一个页面getParameter就会取不到传过来的参数。
2.特殊字符
3.特殊字符的含义
空格换成加号(+)
正斜杠(/)分隔目录和子目录
问号(?)分隔URL和查询
百分号(%)制定特殊字符
#号指定书签
&号分隔参数
4.为啥要编码
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
例如Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc& ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和= 符号进行转义,也就是对其进行编码。
又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。
Url编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。
5.Url可以使用的字符
RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、- _ . ~ 4个特殊字符以及所有保留字符。
6.保留字符
7.不安全字符
还有一些字符,当他们直接放在Url中的时候,可能会引起解析程序的歧义。这些字符被视为不安全字符,原因有很多。
二:JS处理
1.escape,encodeURI和encodeURIComponent的区别
Javascript中提供了3对函数用来对Url编码以得到合法的Url,它们分别是escape / unescape,encodeURI / decodeURI和encodeURIComponent / decodeURIComponent。由于解码和编码的过程是可逆的,因此这里只解释编码的过程。
这三个编码的函数——escape,encodeURI,encodeURIComponent——都是用于将不安全不合法的Url字符转换为合法的Url字符表示,它们有以下几个不同点。
2.其安全字符
就是不会编码的字符
3.对Unicode的编码不同
这三个函数对于ASCII字符的编码方式相同,均是使用百分号+两位十六进制字符来表示。
但是对于Unicode字符,escape的编码方式是%uxxxx,其中的xxxx是用来表示unicode字符的4位十六进制字符。这种方式已经被W3C废弃了。但是在ECMA-262标准中仍然保留着escape的这种编码语法。
encodeURI和encodeURIComponent则使用UTF-8对非ASCII字符进行编码,然后再进行百分号编码。这是RFC推荐的。因此建议尽可能的使用这两个函数替代escape进行编码。
4.小实验
三:总结
今天遇到的问题,查了一下,还是更适合使用encodeURIComponent()
当决定使用哪个函数的时候,还需要查一下其安全字符。
Android EditText禁止输入空格和特殊字符
有时候我们需要限制EditText输入的字符类型,如空格,特殊字符等,这时候我们可以使用系统提供的输入过滤器――InputFilter。具体实现如下:
/** * 禁止EditText输入空格 * @param editText */ public static void setEditTextInhibitInputSpace(EditText editText){ InputFilter filter=new InputFilter() { @Override public CharSequence filter(CharSequence source,int start,int end,Spanned dest,int dstart,int dend) { if(source.equals(" ")return ""; else return null; } }; editText.setFilters(new InputFilter[]{filter}); } /** * 禁止EditText输入特殊字符 * @param editText */ public static void setEditTextInhibitInputSpeChat(EditText editText){ InputFilter filter=new InputFilter() { @Override public CharSequence filter(CharSequence source,int dend) { String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()――+|{}【】‘;:”“'。,、?]"; Pattern pattern = Pattern.compile(speChat); Matcher matcher = pattern.matcher(source.toString()); if(matcher.find())return ""; else return null; } }; editText.setFilters(new InputFilter[]{filter}); }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程小技巧!
Azure数据资源管理器-具有空格/特殊字符的外部表分区
如何解决Azure数据资源管理器-具有空格/特殊字符的外部表分区?
由于某些原因,我不了解,因此我无法使用以下方案:
我有一个定义为的外部表
.create external table Sensors_Datalake (event_id: int,timestmp: datetime,sensor_type: string,sensor: string,value: decimal)
kind=blob
partition by (typePart:string=sensor_type,sensorPart: string=sensor,Month:datetime = startofmonth(timestmp))
pathformat = ("sensor_type=" typePart "/sensor=" sensorPart "/" datetime_pattern("''year=''yyyy''/month=''MM",Month))
dataformat=parquet
(
h@''https://blabla.blob.core.windows.net/adx;secret''
)
with (sampleUris = true)
然后,我从主传感器表(相同的模式)向其中导出一些数据。它可以正常工作,并且我看到实木复合地板文件蜂鸣生成。
重要提示:传感器的字符串包含破折号和一些空格,例如。 81 1 001-4(81 [space] 1 [space] 001-4)
现在可以了
external_table("Sensors_Datalake")
| take 1
我得到一些结果
event_id: 5
timestap: some timestamp
sensor_type: E 5
sensor: 81 1 001-4
现在,如果我要做
external_table("Sensors_Datalake")
| where sensor_type == "E 5"
| count
我得到零结果。传感器或组合相同
external_table("Sensors_Datalake")
| where sensor_type == "E 5" and sensor == "81 1 001-4"
| count
仍然为零。
我需要做一些转义或类似操作才能使其正常工作吗?我浏览了文档,没有发现任何提示。
相同的代码在我要分区的数据中没有任何空格就可以了。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
我们今天的关于php-带有空格和特殊字符的URL的最佳做法和php空格符号的分享已经告一段落,感谢您的关注,如果您想了解更多关于.htaccess url中带有特殊字符的有关问题、033 Url中特殊字符的处理、Android EditText禁止输入空格和特殊字符、Azure数据资源管理器-具有空格/特殊字符的外部表分区的相关信息,请在本站查询。
本文标签: