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

小编典典

您需要这样的内容(假设输入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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IT报价系统v1.3正式版 【安装说明】 安装链接:install.php、管理后台链接:admina.php 安装过程需要生成8000左右节点,中间有稍许停顿,请耐心等待。 强烈建议不要使用创始人帐号进行内容管理,请使用以下管理组的帐号进行常规管理: 系统管理组:内置帐号与密码有admin08cms,用于进行系统设置与模板管理等。 常规管理组:内置帐号与密码有08cms,用于日常的内容管理。 强烈建议不用创始人帐号进行日常管理,而使用管理帐号08cms或相应权限的帐号。 【普通版功能】 # 启用v3.5新内核,更高效,更安全。在节点生成环节,效率提高10倍以上,在前台页面生成上,有不等的效率的提升。 # 新增经销商频道节点,支持自定义节点,可以多角度索引商家,促销信息,及商家排行。 # 全站页面url自定义部署,首页允许分页,域名绑定将更加灵活多变。 # 新增WAP功能 # 会员推广与论证 # 新增类目字段,设置商家、广告,不同子站栏目之间内容的关联。 # 增加类目的选择方式,增加类目分级联动选择(普通加载、ajax加载可选)。 # 精简系统程序文件,让系统变得更简洁。 # 改进产品报价的操作流程。 # 重新规划前台后台菜单,有更好的用户体验。 # 新增栏目、品牌、价格,可以继续设置三者之间的关联性,并自动生成节点。 # 在原有的资讯频道(手机、数码相机、摄像机、MP3/MP4、GPS、笔记本、DIY硬件、台式机)的基础上。新增新闻、导购、评测、行情等资讯类前台展示页面。 # 增加会员自行发布促销功能,并在会员频道中加入促销模块。 # 改进会员注册流程,商家会员注册成功后直接成为普通经销商。 # 增加促销信息的置顶,推到首页,商家置顶及推到首页,报价置顶等营销方式。 # 在资讯类信息与产品之间,进行有效关联,并在前台的资讯与产品页面体现。 # 产品库前台增加一个品牌与价格通道页面,进入产品检索。 # 广告与栏目更好地关联,并全面使用混合广告位(一个广告位同时支持图片、FLASH、或代码)。 # 更加灵活的文档内容页面,url完全自定义,增加文档附加页页数(共支持4个文档页面),所有页面允许分页与生成静态。 # 更加灵活的类目节点页面,url完全自定义,支持3个节点页面,所有节点页允许分页与生成静态。 # 在模板标识(单个文档、单个会员)中,增加浏览权限功能,不同权限的会员浏览时将更到不同的效果。 # 标识js调用将不再限制用封装标识。
# 启用v3.5新内核,更高效,更安全。在节点生成环节,效率提高10倍以上,在前台页面生成上,有不等的效率的提升。 # 新增经销商频道节点,支持自定义节点,可以多角度索引商家,促销信息,及商家排行。 # 全站页面url自定义部署,首页允许分页,域名绑定将更加灵活多变。 # 新增WAP功能 # 会员推广与论证 # 新增类目字段,设置商家、广告,不同子站栏目之间内容的关联。 # 增加类目的选择方式,增加类目分级联动选择(普通加载、ajax加载可选)。 # 精简系统程序文件,让系统变得更简洁。 # 改进产品报价的操作流程。 # 重新规划前台后台菜单,有更好的用户体验。 # 新增栏目、品牌、价格,可以继续设置三者之间的关联性,并自动生成节点。 # 在原有的资讯频道(手机、数码相机、摄像机、MP3/MP4、GPS、笔记本、DIY硬件、台式机)的基础上。新增新闻、导购、评测、行情等资讯类前台展示页面。 # 增加会员自行发布促销功能,并在会员频道中加入促销模块。 # 改进会员注册流程,商家会员注册成功后直接成为普通经销商。 # 增加促销信息的置顶,推到首页,商家置顶及推到首页,报价置顶等营销方式。 # 在资讯类信息与产品之间,进行有效关联,并在前台的资讯与产品页面体现。 # 产品库前台增加一个品牌与价格通道页面,进入产品检索。 # 广告与栏目更好地关联,并全面使用混合广告位(一个广告位同时支持图片、FLASH、或代码)。 # 更加灵活的文档内容页面,url完全自定义,增加文档附加页页数(共支持4个文档页面),所有页面允许分页与生成静态。 # 更加灵活的类目节点页面,url完全自定义,支持3个节点页面,所有节点页允许分页与生成静态。 # 在模板标识(单个文档、单个会员)中,增加浏览权限功能,不同权限的会员浏览时将更到不同的效果。 # 标识js调用将不再限制用封装标识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值