首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP (preg_replace)删除非英语的特殊字符

PHP (preg_replace)删除非英语的特殊字符
EN

Stack Overflow用户
提问于 2015-03-14 09:00:51
回答 2查看 1.4K关注 0票数 1

我试着删除所有特殊的角色

()[]{}`@#$%^&*_+=/،;:?؟>< .,

但此代码将删除所有规范字符加上非英语字符,我只希望删除规范字符而不是非英语字符。我的意思是只接受english+non英语,但不接受特殊字符。

代码语言:javascript
运行
复制
preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-14 11:18:29

使用unicode属性:

代码语言:javascript
运行
复制
preg_replace("/[^\p{L}\p{N}]/u", "-", $_REQUEST["title"]);

这将取代任何字符不是字母,也不是数字的破折号。

编辑评论:

代码语言:javascript
运行
复制
$regex = array('/[^\p{L}\p{N}\s]/u', '/\s/');
$repl  = array('', '-');
preg_replace($regex, $repl, $_REQUEST["title"]);
票数 1
EN

Stack Overflow用户

发布于 2015-03-14 09:36:40

作为评论中讨论的结果,这可能会让您开始:

代码语言:javascript
运行
复制
<?php

$subject = "This is a string ()[]{}~`@#\$%^&?؟*_+=/|.,،;:' getting stripped.";

$pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/'));
$subject = preg_replace($pattern, '', $subject);

echo $subject."\n";

关于sql注入预防,您还提到了:正如对问题的注释中所说的,您必须使用现代数据库适配器(mysqli或PDO)和“准备好的语句”。您将在文档中找到对此的解释。其他的一切都是“只解决一点问题”,这根本没有意义。

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

https://stackoverflow.com/questions/29047203

复制
相关文章

相似问题

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