PHP 清理标点符号 终级解决方式

分类:PHP |

今天出现一问题:  用户输入的手机号前后出现了 异常字符, 使用 var_dump 和 print_r 查看均正常, 但使用 var_export 输出到文件里时, 就如下图

image.png


原来这里的异常字符是标点符号, 解决方法: 


    # 清理标点符号 , 某些异常情况下 比如手机复制手机号, 常常将标点符号写入 需清理
    public static function cleanMark($text)
    {
        if (trim($text) == '') return '';
        $text = preg_replace("/[[:punct:]\s]/", '', $text);
        $text = urlencode($text);
        $text = preg_replace("/(%7E|%60|%21|%40|%23|%24|%25|%5E|%26|%27|%2A|%28|%29|%2B|%7C|%5C|%3D|\-|_|%5B|%5D|%7D|%7B|%3B|%22|%3A|%3F|%3E|%3C|%2C|\.|%2F|%A3%BF|%A1%B7|%A1%B6|%A1%A2|%A1%A3|%A3%AC|%7D|%A1%B0|%A3%BA|%A3%BB|%A1%AE|%A1%AF|%A1%B1|%A3%FC|%A3%BD|%A1%AA|%A3%A9|%A3%A8|%A1%AD|%A3%A4|%A1%A4|%A3%A1|%E3%80%82|%EF%BC%81|%EF%BC%8C|%EF%BC%9B|%EF%BC%9F|%EF%BC%9A|%E3%80%81|%E2%80%A6%E2%80%A6|%E2%80%9D|%E2%80%9C|%E2%80%98|%E2%80%99|%EF%BD%9E|%EF%BC%8E|%EF%BC%88|%E2%80%AD|%E2%80%AC)+/", ' ', $text);
        $text = urldecode($text);
        $text = preg_replace("/[\x{2000}-\x{206f}]/u", '', $text);
        return trim($text);
    }



-------------------------------------------------------------------------------------------------------------------------------------------------

UTF-8 常用标点符号


范围:十进制 8192-8303,十六进制 2000-206F。

如果您想要在 HTML 中显示这些字符,您可以使用下表中的 HTML 实体。

如果字符没有 HTML 实体,您可以使用十进制或十六进制引用。

实例

<p>我将显示 &permil;<p>
<p>我将显示 &#8240;<p>
<p>我将显示 &#x2030;<p>

结果如下:

我将显示 ‰
我将显示 ‰
我将显示 ‰
尝试一下 »

并非下表中的所有实体都能在所有的浏览器中正确地显示。

目前,IE 11 是唯一一个能正确显示所有 HTML5 实体的浏览器。


81922000
EN QUAD

81932001
EM QUAD

81942002&ensp;短空格(EN SPACE)

81952003&emsp;长空格(EM SPACE)

81962004
THREE-PER-EM SPACE

81972005
FOUR-PER-EM SPACE

81982006
SIX-PER-EM SPACE

81992007
数样间距(FIGURE SPACE)

82002008
标点距离(PUNCTUATION SPACE)

82012009&thinsp;THIN SPACE

8202200A
HAIR SPACE

8203200B
零宽空格(ZERO WIDTH SPACE)
8204200C&zwnj;ZERO WIDTH NON-JOINER
8205200D&zwj;ZERO WIDTH JOINER
8206200E&lrm;从左到右标记(LEFT-TO-RIGHT MARK)
8207200F&rlm;从右到左标记(RIGHT-TO-LEFT MARK)
82082010
连字符(HYPHEN)
82092011
不换行连字符(NON-BREAKING HYPHEN)
82102012
数字线(FIGURE DASH)
82112013&ndash;短破折号(EN DASH)
82122014&mdash;长破折号(EM DASH)
82132015
单杠(HORIZONTAL BAR)
82142016
双垂直线(DOUBLE VERTICAL LINE)
82152017
双低线(DOUBLE LOW LINE)
82162018&lsquo;左单引号标记(LEFT SINGLE QUOTATION MARK)
82172019&rsquo;右单引号标记(RIGHT SINGLE QUOTATION MARK)
8218201A&sbquo;低单引号(SINGLE LOW-9 QUOTATION MARK)
8219201B
反转的高单引号(SINGLE HIGH-REVERSED-9 QUOTATION MARK)
8220201C&ldquo;左双引号标记(LEFT DOUBLE QUOTATION MARK)
8221201D&rdquo;右双引号标记(RIGHT DOUBLE QUOTATION MARK)
8222201E&bdquo;低双引号(DOUBLE LOW-9 QUOTATION MARK)
8223201F
反转的高双引号(DOUBLE HIGH-REVERSED-9 QUOTATION MARK)
82242020&dagger;短剑(DAGGER)
82252021&Dagger;双短剑(DOUBLE DAGGER)
82262022&bull;着重号(BULLET)
82272023
三角形的着重号(TRIANGULAR BULLET)
82282024
一点(ONE DOT LEADER)
82292025
两点(TWO DOT LEADER)
82302026&hellip;水平省略号(HORIZONTAL ELLIPSIS)
82312027
连字点(HYPHENATION POINT)

82322028
行分隔符(LINE SEPARATOR)

82332029
段落分隔符(PARAGRAPH SEPARATOR)
8234202A
从左到右嵌入(LEFT-TO-RIGHT EMBEDDING)
8235202B
从右到左嵌入(RIGHT-TO-LEFT EMBEDDING)
8236202C
定向格式化(POP DIRECTIONAL FORMATTING)
8237202D
从左到右重载(LEFT-TO-RIGHT OVERRIDE)
8238202E
从右到左重载(RIGHT-TO-LEFT OVERRIDE)

8239202F
窄的不换行空格(NARROW NON-BREAK SPACE)
82402030&permil;千分号(PER MILLE SIGN)
82412031
万分号(PER TEN THOUSAND SIGN)
82422032&prime;一素(PRIME)
82432033&Prime;双素(DOUBLE PRIME)
82442034
三素(TRIPLE PRIME)
82452035
反转的一素(REVERSED PRIME)
82462036
反转的双素(REVERSED DOUBLE PRIME)
82472037
反转的三素(REVERSED TRIPLE PRIME)
82482038
插入符号(CARET)
82492039&lsaquo;左单角引号(SINGLE LEFT-POINTING ANGLE QUOTATION MARK)
8250203A&rsaquo;右单角引号(SINGLE RIGHT-POINTING ANGLE QUOTATION MARK)
8251203B
参考标记(REFERENCE MARK)
8252203C
双感叹标记(DOUBLE EXCLAMATION MARK)
8253203D
疑问惊叹号(INTERROBANG)
8254203E&oline;上划线(OVERLINE)
8255203F
下弯线(UNDERTIE)
82562040
字符弯线(CHARACTER TIE)
82572041
插入符号插入点(CARET INSERTION POINT)
82582042
三星符号(ASTERISM)
82592043
着重连字符(HYPHEN BULLET)
82602044&frasl;分数斜线(FRACTION SLASH)
82612045
带羽毛的左方括号(LEFT SQUARE BRACKET WITH QUILL)
82622046
带羽毛的右方括号(RIGHT SQUARE BRACKET WITH QUILL)
82632047
双问号标记(DOUBLE QUESTION MARK)
82642048
问号感叹号标记(QUESTION EXCLAMATION MARK)
82652049
感叹号问号标记(EXCLAMATION QUESTION MARK)
8266204A
TIRONIAN SIGN ET
8267204B
反转的段落符号(REVERSED PILCROW SIGN)
8268204C
黑色的左着重号(BLACK LEFTWARDS BULLET)
8269204D
黑色的右着重号(BLACK RIGHTWARDS BULLET)
8270204E
低的星号(LOW ASTERISK)
8271204F
反向分号(REVERSED SEMICOLON)
82722050
关闭(CLOSE UP)
82732051
两个垂直对齐的星号(TWO ASTERISKS ALIGNED VERTICALLY)
82742052
商业减号(COMMERCIAL MINUS SIGN)
82752053
破折号(SWUNG DASH)
82762054
倒置的下弯线(INVERTED UNDERTIE)
82772055
花标点标记(FLOWER PUNCTUATION MARK)
82782056
三点标点符号(THREE DOT PUNCTUATION)
82792057
四素(QUADRUPLE PRIME)
82802058
四点标点符号(FOUR DOT PUNCTUATION)
82812059
五点标点符号(FIVE DOT PUNCTUATION)
8282205A
两点标点符号(TWO DOT PUNCTUATION)
8283205B
四点标记(FOUR DOT MARK)
8284205C
点交叉(DOTTED CROSS)
8285205D
三点冒号(TRICOLON)
8286205E
垂直的四点(VERTICAL FOUR DOTS)

8287205F
中等的数学空格(MEDIUM MATHEMATICAL SPACE)
82882060
WORD JOINER
82892061
函数应用(FUNCTION APPLICATION)
82902062
不可见的乘(INVISIBLE TIMES)
82912063
不可见的分离器(INVISIBLE SEPARATOR)
82922064
不可见的加(INVISIBLE PLUS)
82942066
从左到右分离(LEFT-TO-RIGHT ISOLATE)
82952067
从右到左分离(RIGHT-TO-LEFT ISOLATE)
82962068
第一强分离(FIRST STRONG ISOLATE)
82972069
定向分离(POP DIRECTIONAL ISOLATE)
8298206A
抑制对称交换(INHIBIT SYMMETRIC SWAPPING)
8299206B
激活对称交换(ACTIVATE SYMMETRIC SWAPPING)
8300206C
抑制阿拉伯语形态塑造(INHIBIT ARABIC FORM SHAPING)
8301206D
激活阿拉伯语形态塑造(ACTIVATE ARABIC FORM SHAPING)
8302206E
国家数字形状(NATIONAL DIGIT SHAPES)
8303206F
名义数字形状(NOMINAL DIGIT SHAPES)