首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有ascii字符模式和utf-8多字节主题的preg_函数安全吗?

使用带有ascii字符模式和utf-8多字节主题的preg_函数安全吗?
EN

Stack Overflow用户
提问于 2012-11-08 20:35:13
回答 2查看 104关注 0票数 1

我知道如果我对模式使用多字节(UTF-8)字符,我必须使用mb_函数,或者必须对preg_函数的模式使用u选项。

但是,当我只对preg_函数的主题使用多字节(UTF-8)字符,对模式只使用ascii字符时,preg_函数(没有u选项)能正常工作吗?

我知道在这种情况下,我必须使用mb_函数或在模式中添加u选项:

代码语言:javascript
复制
$str = preg_replace("/$utf8_multibyte_pattern/", '', $str);

我想知道这段代码(未使用u选项)是否安全:

代码语言:javascript
复制
$ascii_pattern = "[a-zA-Z0-9'$#\\\"%&()\-~|~=!@`{}[]:;+*/.,_<>?_\n\t\r]";
$multibyte_str = preg_replace("/$ascii_pattern/", '', $utf8_multibyte_str);
EN

回答 2

Stack Overflow用户

发布于 2012-11-08 21:48:12

也许我自己找到了答案。

但是,如果有人非常了解字符代码,请对此答案进行评论或发布另一个答案。

根据维基百科的说法,UTF-8字符代码不包含ascii代码。

http://en.wikipedia.org/wiki/UTF-8#Advantages

UTF-8将ASCII字符本身表示为不会出现在其他任何地方的单个字节,这使得

-8可以与大多数现有API一起工作,这些API接受字节字符串,但只特殊对待一小部分ASCII码。这样就不需要为每个API编写新的Unicode版本,并且与其他Unicode编码相比,将现有系统转换为UTF-8要容易得多。

我认为这意味着带有不带u选项的ascii模式的preg函数对于多字节(UTF8)主题是安全的。

和此代码(不带u选项)

代码语言:javascript
复制
$multibyte_str = preg_replace("/$ascii_pattern/", '', $utf8_multibyte_str);

和这段代码(带有u选项)

代码语言:javascript
复制
$multibyte_str = preg_replace("/$ascii_pattern/u", '', $utf8_multibyte_str);

都是一样的。两者都正常工作。

我说的对吗?

票数 1
EN

Stack Overflow用户

发布于 2012-11-08 20:58:09

据我所知,只要像这样使用unicode属性(/u),它就是安全的:

代码语言:javascript
复制
$ascii_pattern = "[a-zA-Z0-9'$#\\\"%&()\-~|~=!@`{}[]:;+*/.,_<>?_\n\t\r]";
$multibyte_str = preg_replace("/$ascii_pattern/u", '', $utf8_multibyte_str);

要查看有关unicode字符的更多信息,请参见here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13289259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档