Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP(preg_replace)删除非英语的特殊字符_Php_Preg Replace - Fatal编程技术网

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

PHP(preg_replace)删除非英语的特殊字符,php,preg-replace,Php,Preg Replace,我正在尝试删除所有特殊的角色,比如 ()[]{}~`@#$%^&*.+=/|,،:?؟>根据评论中的讨论结果,这可能会让您开始: <?php $subject = "This is a string ()[]{}~`@#\$%^&?؟*_+=/|.,،;:' getting stripped."; $pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/')); $subject

我正在尝试删除所有特殊的角色,比如


()[]{}~`@#$%^&*.+=/|,،:?؟>根据评论中的讨论结果,这可能会让您开始:

<?php

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

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

echo $subject."\n";
使用unicode属性:

preg_replace("/[^\p{L}\p{N}]/u", "-", $_REQUEST["title"]);
这将用破折号替换任何不是字母和数字的字符

根据评论编辑:

$regex = array('/[^\p{L}\p{N}\s]/u', '/\s/');
$repl  = array('', '-');
preg_replace($regex, $repl, $_REQUEST["title"]);

你可以试试看,没有“特殊角色”这样的东西。只有字符。也许有些你还不习惯。但这并不完全是一个技术定义。那么你想删除或保留什么字符范围呢?@arkascha好吧,我想用它来创建漂亮的url,我想删除至少那些不适合SEO和sql注入等的字符范围。。。比如?!&$%。。所以您无法命名要替换的字符?但你希望得到答案吗?对不起,我不是想挑剔。只是:如果没有一个明确的问题,您希望得到什么样的答案?除此之外:您无法通过这种方式阻止sql注入。为此,在设置语句时必须使用“准备好的语句”。其他一切都毫无意义。你所尝试的是这样的:嗯,我想把火扑灭。但我不敢看它。于是我砍倒了一棵树。火烧木头。所以当我砍倒那棵树的时候,它可能会死。谢谢你的回答,它工作得很好。但看起来它不会删除主题行末尾的点。哦,对不起,忘记了字符集周围的方括号。。。我稍微改变了答案。回答得很好,阿卡夏,非常感谢你的帮助。很高兴我能帮上忙。但是,不要忘记:这不是解决您的问题的方法。在你发现你的问题之前不可能有一个。不要停止与解决方案的一部分。当你遇到问题的时候,你会因此而恨自己的。是的,你说得对,我知道。还是。。替换列表中还有更多我们没有提到的字符。这个主意不错,但有一个小问题,它适用于英语字符,但不适用于非英语字符。请参见此代码$title=“سلام”$输出=preg_replace(“/[^\p{L}\p{N}]/”,“-”,$title);echo$输出;在phptester.net/@Alipour中:对不起,我忘了添加
/u
修饰符。请看我的编辑。谢谢,我认为这一个更适合我的情况,因为它不允许任何字符,除了英语和非英语和编号,并且不需要定义任何要删除的字符。是否有机会设置,如果空格将其转换为短划线,否则将其删除?
$regex = array('/[^\p{L}\p{N}\s]/u', '/\s/');
$repl  = array('', '-');
preg_replace($regex, $repl, $_REQUEST["title"]);