您的位置:澳门新葡8455最新网站 > 编程教学 > 8空格惹的祸,特殊字符

8空格惹的祸,特殊字符

发布时间:2019-11-14 16:55编辑:编程教学浏览(118)

        贰次坑爹的小bug。读取风度翩翩段文字(编码utf-8),想替换掉空格,str_replace(" "..)、preg_replace("/s/"..)都不起成效。

    十五进制值 1. + UTucsonL 中+号表示空格 %2B

    <?php
    
    // 替换<p>后4个空格
    $str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089");
    $str = str_replace(" ", "-", $str);
    $str = preg_replace("/s/", "-", $str);
    echo $str;  // 不起作用
    
    1. 空格 UHavalL中的空格能够用+号恐怕编码 %20
    2. / 分隔目录和子目录 %2F
    3. ? 分隔实际的 U宝马X5L 和参数 %3F
    4. % 钦赐非常字符 %25
    5. # 表示书签 %23
    6. & U传祺L 中内定的参数间的相间符 %26
    7. = U库罗德L 中钦命参数的值 %3D

      不能,将替换不了的空格ord()下才来看,那个utf-8空格比较分外。ASCII 194 + 160出去的。

    寸草不留的不二秘籍:
    replace() 方法借使间接用str.replace("-","!") 只会改动第二个非常的字符.
    而str.replace(/-/g,"!")则足以替换掉全部神工鬼斧的字符(g为全局标识)。
    replace()
    js中替换字符变量如下:

    <?php
    
    // 替换<p>后4个空格
    $str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089");
    $str = str_replace(chr(194) . chr(160), "-", $str);  // 解决方法
    echo $str;  // OK
    

     data2=data2.replace(/%/g,"%25");
     data2=data2.replace(/#/g,"%23");
     data2=data2.replace(/&/g,"%26");

      实验下那一个空格。

    别的一些资料。。。仅供参谋。。。

    <?php
    
    // utf-8无bom文件下,四个空格
    $s1 = chr(194) . chr(160);
    $s2 = chr(32);
    $s3 = " ";
    $s4 = " ";  // 全角空格
    $s = $s1 . $s2 . $s3 . $s4;
    
    // 判断
    $r  = '';
    if ($s1 == $s2) $r .= 1;
    if ($s1 == $s3) $r .= 2;
    if ($s1 == $s4) $r .= 3;
    if ($s2 == $s3) $r .= 4;
    if ($s2 == $s4) $r .= 5;
    if ($s3 == $s4) $r .= 6;
    
    // 结果
    echo $s, "#####", $r, "####", str_replace(" ", "-", $s), "####", preg_replace("/s/", "-", $s);
    

    在使用url举行参数传递时,常常会传送一些华语名(或带有特殊字符卡塔尔的参数或U陆风X8L地址,在后台管理时会产生转移错误。在多少传递页面使用GB2312,而在吸收接纳页面使用UTF8,那样接受到的参数就大概会与原来发生不平等。使用服务器端的urlEncode函数编码的U路虎极光L,与运用客商端java的encodeURI函数编码的ULANDL,结果就不相像。

      结果:为便利书写,|代表空格,|代表全角空格。

    java对文字进行编码涉及3个函数:escape,encodeULANDI,encodeULANDIComponent,相应3个解码函数:unescape,decodeUHighlanderI,decodeU途达IComponent

      ||||####4####|--|####|--|

    java中的编码方法:
    escape() 方法:选拔ISO Latin字符集对点名的字符串举办编码。全部的空格符、标点符号、特殊字符以致别的非ASCII字符都将被转形成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字卡塔尔国。举个例子,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +

      改下浏览器编码为gbk,结果:聽 銆€#####4####聽--銆€####聽--銆€

    encodeU卡宴I()方法:把U昂CoraI字符串接收UTF-8编码格式转造成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '

     

    encodeURIComponent ()方法:把U大切诺基I字符串采纳UTF-8编码格式转形成escape格式的字符串。与encodeU昂CoraI()相比较,那个方法将对越多的字符举行编码,譬如/ 等字符。所以倘使字符串里面含有了U索罗德I的多少个部分的话,不能够用这么些点子来开展编码,否则/ 字符被编码之后UPAJEROL将展现错误。不会被此方法编码的字符:! * ( )

      难题的发源,在于UTF-8这种编码里面,存在三个独出心裁的字符,其编码是“0xC2 0xA0”(194 160),转变来字符的时候,表现为多少个空格,跟常常的半角空格(ASCII 0x20卡塔 尔(英语:State of Qatar)相通,唯大器晚成的两样是它的宽窄不会被减少,由此比比较多的被用于网页制版(如首行缩进之类卡塔尔。而任何的编码格局如GB2312、Unicode之类并不曾这么的字符。

    于是,对于华语字符串来讲,如果不指望把字符串编码格式转变成UTF-8格式的(例如原页面和目的页面的charset是同样的时候卡塔尔,只必要采纳escape。即使您的页面是GB2312也许此外的编码,而选用参数的页面是UTF-8编码的,就要动用encodeULacrosseI或者encodeUHavalIComponent。

      总计下来就是:更改不了的字符,打字与印刷出ASCII码来总能替换掉吗。

    别的,encodeUOdysseyI/encodeU牧马人IComponent是在java1.5后头引入的,escape则在java1.0本子就有。
    1、  传递参数时需求选拔encodeU昂CoraIComponent,那样组合的url才不会被#等特殊字符截断。

     

       例如:< language="java">write('<a href=";

    参考:杀鸡取蛋搜聚UTF-8网页空格形成问号乱码  诡异的UTF8空格

    2、  实行url跳转时能够全体采纳encodeULANDI

    例如:Location.href=encodeURI("");

    3、  js使用数据时方可运用escape

    例如:搜藏中history纪录。

    4、  escape对0-255以外的unicode值进行编码时输出%u****格式,此外景况下escape,encodeU凯雷德I,encodeUCRUISERIComponent编码结果风姿罗曼蒂克致。

    最多选取的应该为encodeU牧马人IComponent,它是将普通话、塞尔维亚语等特殊字符转换来utf-8格式的url编码,所以固然给后台传递参数供给接受encodeU逍客IComponent时索要后台解码对utf-8协理(form中的编码方式和当下页面编码格局相似卡塔尔

    escape不编码字符有七十八个:*,+,-,.

    1. + UCRUISERL 中+号表示空格 %2B 2. 空格 URubiconL中的空格能够用+号或许编码 %20 3. / 分隔目录和子目录 %2F 4. ? 分隔实际的 UQX56L 和参数 %3F 5....

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:8空格惹的祸,特殊字符

    关键词:

上一篇:没有了

下一篇:str字符串 find( ) 方法