php preg_replace函数错误的结果

时间:2016-10-21 07:14:39

标签: php regex function preg-replace

我试图从用户使用$ _POST字符串删除(大多数)特殊字符,然后将其插入数据库,并使用以下preg_replace函数:

echo( 'checked = "checked"');

现在,输入$ description:

preg_replace('/[^a-zA-Z0-9\-._äöü]/', '', $description);

结果只是:

abc !"§$%&/()=?`*'#+´ß

为什么函数删除了abc,但保留了'?',这不在我的preg_replace白名单中? 任何答案都是非常苛刻的。

3 个答案:

答案 0 :(得分:1)

PHP应配置为UTF-8。将default_charset INI选项设置为'UTF-8';使用u pattern modifier

ini_set('default_charset', 'UTF-8');
$description = 'abc !"§$%&/()=?`*\'#+´ß.';
$r = preg_replace('/[^a-zA-Z0-9\-\._äöü]/u', '', $description);
var_dump($r);

示例输出

string(4) "abc."

另外,请考虑设置UTF-8语言环境,因为basename等函数可识别语言环境:

setlocale(LC_ALL,
  'de_DE.UTF-8',
  'de_DE.utf8',
  'en_US.UTF-8',
  'en_US.utf8'
);

答案 1 :(得分:0)

您可以使用'/\W/'删除所有特殊字符:

<?php
$string = 'abc !"§$%&/()=?*#+´ß';
echo preg_replace('/\W/', '', $string); // abc
?>

答案 2 :(得分:0)

var count = 2;
for(var i = 0; i < count; i++){
 function(){
        if (jQuery('#gallery-v' +i +'').length) {
            var $container = jQuery('#gallery-v' +i +'');
            alert($container);
            $container.imagesLoaded( function(){
                $container.isotope({
                    filter: '*',
                    animationOptions: {
                        duration: 750,
                        easing: 'linear',
                        queue: false
                    }
                });
            });
            jQuery('#filterlist_v' +i +' a').click(function() {
                alert(this);
                jQuery('#filterlist_v +i +' .current').removeClass('current');
                jQuery(this).addClass('current');

                var selector = jQuery(this).attr('data-filter');
                $container.isotope({
                    filter: selector,
                    animationOptions: {
                        duration: 750,
                        easing: 'linear',
                        queue: false
                    }
                });
                return false;
            });
        }
    }
}

使用方法:

function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.

   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}