小编典典

您需要这样的内容(假设输入UTF-8,而忽略CJK(中文,日文,韩文)):

$chr_map = array(

// Windows codepage 1252

"\xC2\x82" => "'", // U+0082⇒U+201A single low-9 quotation mark

"\xC2\x84" => '"', // U+0084⇒U+201E double low-9 quotation mark

"\xC2\x8B" => "'", // U+008B⇒U+2039 single left-pointing angle quotation mark

"\xC2\x91" => "'", // U+0091⇒U+2018 left single quotation mark

"\xC2\x92" => "'", // U+0092⇒U+2019 right single quotation mark

"\xC2\x93" => '"', // U+0093⇒U+201C left double quotation mark

"\xC2\x94" => '"', // U+0094⇒U+201D right double quotation mark

"\xC2\x9B" => "'", // U+009B⇒U+203A single right-pointing angle quotation mark

// Regular Unicode // U+0022 quotation mark (")

// U+0027 apostrophe (')

"\xC2\xAB" => '"', // U+00AB left-pointing double angle quotation mark

"\xC2\xBB" => '"', // U+00BB right-pointing double angle quotation mark

"\xE2\x80\x98" => "'", // U+2018 left single quotation mark

"\xE2\x80\x99" => "'", // U+2019 right single quotation mark

"\xE2\x80\x9A" => "'", // U+201A single low-9 quotation mark

"\xE2\x80\x9B" => "'", // U+201B single high-reversed-9 quotation mark

"\xE2\x80\x9C" => '"', // U+201C left double quotation mark

"\xE2\x80\x9D" => '"', // U+201D right double quotation mark

"\xE2\x80\x9E" => '"', // U+201E double low-9 quotation mark

"\xE2\x80\x9F" => '"', // U+201F double high-reversed-9 quotation mark

"\xE2\x80\xB9" => "'", // U+2039 single left-pointing angle quotation mark

"\xE2\x80\xBA" => "'", // U+203A single right-pointing angle quotation mark

);

$chr = array_keys ($chr_map); // but: for efficiency you should

$rpl = array_values($chr_map); // pre-calculate these two arrays

$str = str_replace($chr, $rpl, html_entity_decode($str, ENT_QUOTES, "UTF-8"));

这里是背景:

每个Unicode字符都完全属于一个“常规类别”,其中可以包含引号字符的字符如下:

(这些页面可方便地检查您是否没有错过任何内容-

类别索引)

有时在启用Unicode的正则表达式中匹配这些类别很有用。

此外,Unicode字符具有“属性”,您感兴趣的是Quotation_Mark。不幸的是,这些不能在正则表达式中访问。

在Wikipedia中,您可以找到具有Quotation_Mark属性的字符组。最终参考是unicode.org上的PropList.txt,但这是一个ASCII文本文件。

如果您还需要翻译CJK字符,则只需获取它们的代码点,确定其翻译,并找到其UTF-8编码,例如,通过在fileformat.info中查找(例如,对于U +

301E:http

://www.fileformat.info/info/unicode/char/301e/index.htm)。

关于Windows代码页1252:Unicode定义了前256个代码点,以表示与ISO-8859-1完全相同的字符,但是ISO-8859-1通常与Windows代码页1252混淆,因此所有浏览器都呈现0x80-0x9F范围,在ISO-8859-1中为“空”(更确切地说:它包含控制字符),就像Windows代码页1252一样。Wikipedia页中的表列出了Unicode等效项。

注意:strtr()通常比慢str_replace()。使用您的输入和PHP版本为其计时。如果速度足够快,您可以直接使用地图,例如my $chr_map。

如果您不确定您的输入是UTF-8编码的,并且愿意假设输入不是UTF-8编码的,那么它是ISO-8859-1或Windows代码页1252,那么您可以在执行其他操作之前执行此操作:

if ( !preg_match('/^\\X*$/u', $str)) {

$str = utf8_encode($str);

}

警告:不过,这种正则表达式在极少数情况下可能无法检测到非UTF-8编码。例如:"Gruß…"/*CP-1252*/=="Gru\xDF\x85"看起来像此正则表达式的UTF-8(U

+ 07C5是N’ko数字5)。该正则表达式可以稍作增强,但是不幸的是,可以证明,对于编码检测问题,不存在完全可靠的解决方案。

如果要将Windows代码页1252产生的范围0x80-0x9F标准化为常规Unicode代码点,则可以执行此操作(并删除$chr_map上面的第一部分):

$normalization_map = array(

"\xC2\x80" => "\xE2\x82\xAC", // U+20AC Euro sign

"\xC2\x82" => "\xE2\x80\x9A", // U+201A single low-9 quotation mark

"\xC2\x83" => "\xC6\x92", // U+0192 latin small letter f with hook

"\xC2\x84" => "\xE2\x80\x9E", // U+201E double low-9 quotation mark

"\xC2\x85" => "\xE2\x80\xA6", // U+2026 horizontal ellipsis

"\xC2\x86" => "\xE2\x80\xA0", // U+2020 dagger

"\xC2\x87" => "\xE2\x80\xA1", // U+2021 double dagger

"\xC2\x88" => "\xCB\x86", // U+02C6 modifier letter circumflex accent

"\xC2\x89" => "\xE2\x80\xB0", // U+2030 per mille sign

"\xC2\x8A" => "\xC5\xA0", // U+0160 latin capital letter s with caron

"\xC2\x8B" => "\xE2\x80\xB9", // U+2039 single left-pointing angle quotation mark

"\xC2\x8C" => "\xC5\x92", // U+0152 latin capital ligature oe

"\xC2\x8E" => "\xC5\xBD", // U+017D latin capital letter z with caron

"\xC2\x91" => "\xE2\x80\x98", // U+2018 left single quotation mark

"\xC2\x92" => "\xE2\x80\x99", // U+2019 right single quotation mark

"\xC2\x93" => "\xE2\x80\x9C", // U+201C left double quotation mark

"\xC2\x94" => "\xE2\x80\x9D", // U+201D right double quotation mark

"\xC2\x95" => "\xE2\x80\xA2", // U+2022 bullet

"\xC2\x96" => "\xE2\x80\x93", // U+2013 en dash

"\xC2\x97" => "\xE2\x80\x94", // U+2014 em dash

"\xC2\x98" => "\xCB\x9C", // U+02DC small tilde

"\xC2\x99" => "\xE2\x84\xA2", // U+2122 trade mark sign

"\xC2\x9A" => "\xC5\xA1", // U+0161 latin small letter s with caron

"\xC2\x9B" => "\xE2\x80\xBA", // U+203A single right-pointing angle quotation mark

"\xC2\x9C" => "\xC5\x93", // U+0153 latin small ligature oe

"\xC2\x9E" => "\xC5\xBE", // U+017E latin small letter z with caron

"\xC2\x9F" => "\xC5\xB8", // U+0178 latin capital letter y with diaeresis

);

$chr = array_keys ($normalization_map); // but: for efficiency you should

$rpl = array_values($normalization_map); // pre-calculate these two arrays

$str = str_replace($chr, $rpl, $str);

2020-05-29

php自动报价,使用PHP转换所有类型的智能报价相关推荐

  1. u32转换bool类型_4.29.类型转换

    类型转换 casting-between-types.md commit 6ba952020fbc91bad64be1ea0650bfba52e6aab4 Rust,和它对安全的关注,提供了两种不同的 ...

  2. golang string转int8_Go教程:23 string转换int类型方法对比

    Go教程:23 string转换int类型方法对比 Go语言时一个强类型的语言,但是强类型的语言有也强类型的语言的烦恼.这个烦恼就是类型转换, 接下来我们就讲解一下怎么把 string 类型变量转换成 ...

  3. SQL语句里将字符串转换数字类型

    SQL语句里将字符串转换数字类型 select * from internal_external_rating_info order by convert(int,internal_rating)   ...

  4. java对象转换String类型的三种方法

    **一.采用Object.toString() **toString方法是java.lang.Object对象的一个public方法.在java中任何对象都会继承Object对象,所以一般来说任何对象 ...

  5. Js转换long类型时间

    Js转换long类型时间 js转换10位long类型的 function ten(longTypeDate) {var date = new Date()date.setTime(longTypeDa ...

  6. 转换blob类型的数据,然后进行下载各种文件,还有各种blob转换的文件类型

    转换blob类型的数据,然后进行下载各种文件 ress //返回的数据流 var blob = new Blob(ress, {type: 'application/vnd.ms-excel;'}); ...

  7. 不删除数据情况下转换文件系统类型,从FAT32转到NTFS

    转换文件系统类型,从FAT32转到NTFS(不删除数据) 如果是从NTFS转FAT32就不能用下面的方法,需要备份你的数据之后再格式化 最近下完电影想把电影传到U盘里,结果显示文件过大不能传,然后看了 ...

  8. Python|Git remote|hosts|PyCharm常用快捷键|变量转换|命名|类型|运算符|分支|调整tab|循环|语言基础50课:学习记录(1)-项目简介及变量、条件及循环

    目录 系列目录 均引自原项目地址: Python语言基础50课简介及相关网址 修改 hosts 文件 解决 GitHub 上图片无法显示 视频资源 Python语言基础50课代码等文件资源 表1. P ...

  9. CAD电气制图中怎么快速转换线缆类型?

    在进行CAD电气制图的过程中,有些时候会需要将普通对象线缆与新实体线缆之间进行相互转换,为此浩辰CAD电气软件中提供了便捷的线缆类型转换功能,接下来的CAD电气制图教程就让小编来给大家介绍一下正版CA ...

最新文章

  1. Spring boot、微服务、OAuth、OpenID的爱恨情仇!
  2. IT外企那点事[转载]
  3. 【操作系统】进程间通信
  4. Xtrabackup备份MySQL
  5. 推荐neter常用优秀开源项目系列之一
  6. html文件内容搜索,html读出文本文件内容
  7. Linux下磁盘分区卸载和磁盘配额
  8. 荣耀30S首销全平台夺冠 赵明:满足消费者对5G的所有需求和想象
  9. 马云将于阿里巴巴功成身退?
  10. ubuntu16.04便捷使用(常用工具、常用快捷键、常用使用教程)
  11. 手把手教你做个人 app
  12. Python读写LMDB文件
  13. Redis学习三:设计与实现之单机数据库的实现
  14. Q1营收利润大增,Take-Two如何掘金“次世代”?
  15. 阿拉伯数字转中国人民币大写字符串
  16. 十进制数转8421BCD码
  17. mysql count 1_MySQL中count(1)和count(*)的区别是什么?
  18. html excel 在线编辑,利用js实现在线编辑excel表格代码
  19. java线程的生命周期及wait(),notify(),notifyAll()的详解分析
  20. RabbitMQ的安装

热门文章

  1. C#中读写INI文件
  2. Netbeans8下 Weblogic EJB案例
  3. SimpleDateFormat解析的时候字符串过长问题
  4. 解析.sens数据集
  5. Linux下c开发 之 线程通信与pthread_cond_wait()的使用
  6. 三个点拟合圆形的函数C#
  7. HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量
  8. 学习笔记(26):Python网络编程并发编程-GIL与自定义互斥锁的区别
  9. Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev
  10. c语言变量为什么要定义,C语言为什么要规定对所用到的变量要“先定义,后使用”...