这些是哪些ASCII字符?

3

我有两个字符需要在php字符串中进行搜索和替换。

这些字符与以下字符不同:

  1. '
  2. "

有人知道我可以使用哪个函数从php字符串中删除它们吗?


2
前两个字符不是ASCII码。它们被称为“智能/花式引号”,主要来自某个办公套件cough,如果您的网站指定了某种编码,则不会出现问题-但遗憾的是,这种编码与Unicode不兼容。 (现在,公平地说,Unicode中应该有等价物-可能是SO现在使用的) - user395760
这些可爱的字符在我长期的编码过程中一直是一个主要的编码难题。 - amosrivera
如果你正在处理那些字符,你可能也会遇到那个 en dash ()。如果你没有使用 UTF-8,这会非常烦人。 - Dan Breen
5个回答

2
这是当有人在Outlook中给你发送邮件时会发生的情况,所以要小心,因为你完全错过了这些单引号的开头和双引号的结尾。但是实际上,你需要使用HTML实体代码
为什么呢?因为在野外有比你上面发布的这两个代码更多的字符,事实上,你只展示了一半的引号(即,你错过了结束单引号和开始双引号)。有数百个字符,你需要以比字符串替换更好的方式对它们进行编码。
有几种方法可以管理从编码到HTML实体的转换。

http://php.net/manual/en/function.htmlentities.php

http://piology.org/entities.html

http://konieczny.be/unicode.html

还有更多,但它们基本上做的是相同的事情。

1
在保存为UTF-8格式的PHP脚本中(以便这些字符能够正确表示),您可以简单地使用str_replace来剥离它们。

1

你所拥有的是称为智能引号或卷曲引号。有人正在做类似的事情。 Chris Shiflett


0

为什么不直接使用 str_replace 呢?

$new_str = str_replace(array('’', '“'), '', $str);

当然,这需要您的PHP脚本以UTF-8格式保存。


如果因为这些字符无法使用UTF-8正确编写而导致无法工作,则必须回退到使用它们的十六进制表示。

例如:

$new_str = str_replace(array('\xC2\x91', '\xC2\x93'), '', $str);

(虽然我不确定我使用的十六进制值是否确实属于你的两个特殊引号)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接