我有一个PHP变量,比如说
$myvariable = "te xt!@ na#@)(me+=&t^*ext?>;.'na^%me";
我想用单个下划线_
替换特殊字符和特殊字符组,包括空格。该字符串可能包含&
,可能会被and
替换。
上一个变量的结果应为;
te_xt_na_me_andt_ext_na_me
我如何在PHP中执行此操作?
答案 0 :(得分:3)
这假定任何,但“字符”被认为是一次性的。
$patterns = array(
'/&/' => 'and', // Ampersand to "and"
'/[^[:alpha:]]+/' => '_' // Anything *but* a character to underscore
);
$result = preg_replace(array_keys($patterns), array_values($patterns), $input);
最后一个模式根据当前语言环境 1 (因此包括空格)替换一个或多个“非单词”字符出现的组。
1 旁注(可能无关紧要):如果运行脚本的服务器具有en_US
作为区域设置,则会发生以下替换:
$input = 'app!le___s &! orän=%ges';
$result = 'app_le_s_and_or_n_ges';
如果语言环境为de_DE
,则结果为:
$result = 'app_le_s_and_orän_ges';
因为ä
是此特定区域设置中[[:alpha:]]
的一部分。避免这种情况的明显解决方案是用[a-zA-Z]
替换字符类。
答案 1 :(得分:2)
这应该这样做:
$myvariable = str_replace('&','and',$myvariable)
$myvariable = preg_replace ('/[^a-z]+/i', '_' , $myvariable)
请参阅:http://php.net/manual/de/function.preg-replace.php
方括号内的插入符号(^)表示查找未在括号中声明的所有内容。所以每个特殊角色都不是“a-z”。加号表示应该匹配多个出现的信号。分界斜杠后面的“i”意味着进行不区分大小写的搜索。