php用正则表达抓取网页中文章(特殊字符宽字符编码,js端会自动解析,特殊字符 )
优采云 发布时间: 2022-02-19 21:14php用正则表达抓取网页中文章(特殊字符宽字符编码,js端会自动解析,特殊字符
)
我在做jsonp传输的时候遇到了问题。当有特殊字符或中文时,会导致数据错误或乱码。一开始,js的编码、解码和正则化都很麻烦。现在找到了一个合适的解决方案,宽字符编码,js端会自动解析,可以处理上面的问题,下面是自己封装的通用类。
代码
using System;<br />using System.Text;<br /><br />/// <br />/// author:Stone_W<br />/// date:2010.12.23<br />/// desc:宽字符编码和解码<br />/// <br />public class CodeWidthChartUtility<br />{<br /> public CodeWidthChartUtility() { }<br /><br /> // 无需转码的字符<br /> private static string NonEncodingChats = "abcdefghijklmnopqrstuvwxyz0123456789`!@#$%^&*()_+|-=\\,./;'[]{}:?";<br /><br /> #region 判断需要转换的字符<br /> /// <br /> /// 判断需要转换的字符<br /> /// <br /> /// 判断字符<br /> /// bool<br /> private static bool IsToWindthChart(char charValue)<br /> {<br /> NonEncodingChats = NonEncodingChats.ToUpper() + NonEncodingChats.ToLower();<br /> return NonEncodingChats.IndexOf(charValue) == -1;<br /> }<br /> #endregion<br /><br /> #region 宽字符编码<br /> /// <br /> /// 宽字符编码<br /> /// 1.编码后 有js控制 浏览器会自动解析[js无需解码]<br /> /// 2.后台控制xxx.InnerHtml=宽字符 会原样输出宽字符串[后台控制需要手动解析]<br /> /// <br /> /// 需要编码的字符串<br /> /// 编码后的宽字符串<br /> public static string WidthChartEncoding(string StrValue)<br /> {<br /> StringBuilder sb = new StringBuilder();<br /> foreach (char item in StrValue)<br /> {<br /> if (IsToWindthChart(item)) // 判断需要转换的字符<br /> {<br /> sb.Append(String.Format("\\u{0:x4}", (int)item));<br /> }<br /> else<br /> {<br /> sb.Append(item);<br /> }<br /> }<br /> return sb.ToString();<br /> }<br /> #endregion<br /><br /> #region 宽字符解码<br /> /// <br /> /// 宽字符解码<br /> /// 1.后台才需要手动解码<br /> /// 2.js 控制的浏览器会自动解码宽字符<br /> /// <br /> /// 宽字符串<br /> /// 一般能看懂的字符<br /> public static string WidthChartDecoding(string WidthStr)<br /> {<br /> StringBuilder sb = new StringBuilder();<br /> string[] _ValueList = WidthStr.Split(new char[] { '\\', 'u' }, StringSplitOptions.RemoveEmptyEntries);<br /> for (int i = 0; i != _ValueList.Length; i++)<br /> {<br /> char _ValueChar = Convert.ToChar(Convert.ToUInt16(_ValueList[i], 16));<br /> sb.Append(_ValueChar.ToString());<br /> }<br /> return sb.ToString();<br /> }<br /> #endregion<br /><br />}
关注下方二维码,订阅更多精彩内容。