utf-8 (PHP, str_replace) 中是不是有不同类型的双引号?

Posted

技术标签:

【中文标题】utf-8 (PHP, str_replace) 中是不是有不同类型的双引号?【英文标题】:Are there different types of double quotes in utf-8 (PHP, str_replace)?utf-8 (PHP, str_replace) 中是否有不同类型的双引号? 【发布时间】:2013-09-15 04:00:05 【问题描述】:

php 5.3 中,我尝试替换字符串中的双引号:

$bar = str_replace('"','\'',$foo);

但是保存在 utf8-Database 中的一些引号并没有被替换,尽管它们看起来非常正常:

"Some text"

我需要搜索不同的字符类型吗? 如果有,它们是什么?

【问题讨论】:

【参考方案1】:

有很多字符看起来像引号,其中大多数不经常使用。用得比较多的是这三个:

"   U+0022 QUOTATION MARK
“   U+201C LEFT DOUBLE QUOTATION MARK
”   U+201D RIGHT DOUBLE QUOTATION MARK

一些比较少见的是全宽引号、同上引号、双引号、双引号等。 Unicode.org 的“confusables”工具会找到15 characters similar to "

您为什么不在这里复制并粘贴有问题的字符以便我们识别它?或者你可以使用 HEX 函数来获取字符的十六进制编码,这是另一种识别方式。

【讨论】:

谢谢@Joni,这听起来很棒!我们正在调查。 我们现在用$bar = rawurlencode(utf8_decode($foo)); 解决了这个问题,但是你的“易混淆”链接很棒【参考方案2】:

能够使用“Unicode 字符的数字 html 编码”插入引号

http://www.utf8-chartable.de/unicode-utf8-table.pl?unicodeinhtml=dec&htmlent=1

unicode 代码点对我不起作用:

"   U+0022 QUOTATION MARK

另外,这对我有用:

"   "  QUOTATION MARK

【讨论】:

【参考方案3】:

我正在搜索 Double low quote 字符,但它未在上述答案中列出。终于找到了,为了节省时间,分享一下:

„ 一个不错的引文”

„ = Double low quote / „ / „ / „ / U+201E

” = Right Double Quotation / ” / ” / ” / U+201D

【讨论】:

这不是在英语中使用的,而是在德语和其他一些语言中的标准开头引用,这些语言在当地印刷惯例的形成时期的某个时间点受到德国的影响。如果要覆盖多种语言的引号,还需要覆盖guillemets等。这里有一个流行的参考:jakubmarian.com/map-of-quotation-marks-in-european-languages

以上是关于utf-8 (PHP, str_replace) 中是不是有不同类型的双引号?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 过滤特殊符号

PHP str_replace 函数

php str_replace类固醇

关于php strtr 和 str_replace 效率的问题

PHP str_replace()字符串匹配

php中的字符串常用函数 str_replace 字符串替换