我很难理解什么时候strtr会更好,str_replace反之亦然.看起来使用任一函数都可以获得完全相同的结果,尽管替换子串的顺序是相反的.例如:
echo strtr('test string', 'st', 'XY')."\n";
echo strtr('test string', array( 's' => 'X', 't' => 'Y', 'st' => 'Z' ))."\n";
echo str_replace(array('s', 't', 'st'), array('X', 'Y', 'Z'), 'test string')."\n";
echo str_replace(array('st', 't', 's'), array('Z', 'Y', 'X'), 'test string');
Run Code Online (Sandbox Code Playgroud)
这输出
YeXY XYring
YeZ Zring
YeXY XYring
YeZ Zring
Run Code Online (Sandbox Code Playgroud)
除了语法之外,使用one还是其他有什么好处吗?任何人不足以达到预期结果的情况?
我想要做的是从字符串中删除所有重音符号和变音符号,将"lärm"变为"larm"或将"andré"变为"andre".我试图做的是utf8_decode字符串,然后使用strtr,但由于我的源文件保存为UTF-8文件,我不能输入所有变音符号的ISO-8859-15字符 - 编辑器插入UTF-8字符.
显然,一个解决方案是拥有一个ISO-8859-15文件的包含,但必须有一个更好的方法,而不是另一个必需的包含?
echo strtr(utf8_decode($input),
'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ',
'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
Run Code Online (Sandbox Code Playgroud)
更新:也许我尝试做的事情有点不准确:我实际上并不想删除变音符号,而是将它们替换为最接近的"单字符ASCII"等价物.
现在我正在使用此函数表情符号:
function emoticons($text) {
$icons = array(
':)' => '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
':-)' => '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
':D' => '<img src="/images/blank.gif" alt="smile" class="icon_laugh" />',
':d' => '<img src="/images/blank.gif" alt="laugh" class="icon_laugh" />',
';)' => '<img src="/images/blank.gif" alt="wink" class="icon_wink" />',
':P' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':-P' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':-p' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':p' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':(' => '<img src="/images/blank.gif" alt="sad face" class="icon_sad" />',
':o' => …Run Code Online (Sandbox Code Playgroud) 我从php.net获得了以下代码:
$GLOBALS['normalizeChars'] = array(
'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A',
'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I',
'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U',
'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a',
'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i',
'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u',
'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f');
$string = strtr($string, $GLOBALS['normalizeChars']);
Run Code Online (Sandbox Code Playgroud)
字符串"åäö"当然应该给我"aao",但我得到"aaa".这让我感到非常沮丧,因为我已经挣了好几个小时 - 我的意思是,感觉就像没有多少可能是错的.
我已经尝试了setlocale(LC_CTYPE,'en_US.utf8')和setlocale(LC_CTYPE,'sv_SE.utf8'),甚至尝试删除代码并使用str_replace('ö','o',$ string)但没有什么工作.
什么可能是错的?
你好吗.希望很好......
我遇到以下代码的问题.该strtr功能无效.它没有输出任何东西......
if ($translate == "DrChatrikWeb") {
$convertarray = array(
"~" => "~",
"!" => "!",
"@" => "@",
"#" => "#",
"$" => "$",
"%" => "%",
"^" => "^",
"&" => "&",
"*" => "*",
"(" => "(",
")" => ")",
"_" => "_",
"+" => "+",
"`" => "`",
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5",
"6" => "6",
"7" => "7",
"8" => "8",
"9" => …Run Code Online (Sandbox Code Playgroud) 我在哪里可以找到不区分大小写的版本strtr?
strtr 超载,我说的是以下一个
string strtr ( string $str , array $replace_pairs )
Run Code Online (Sandbox Code Playgroud) 我有以下函数将特殊重音字符(如ă)转换为字符串中的a-zA-Z字符:
function tradu($sir){
$sir_aux = $sir;
$diacritice = array("?"=>"a", "â"=>"a", "î"=>"i", "Î"=>"I", "?"=>"s", "?"=>"s", "?"=>"t", "?"=>"t");
for($i=0; $i<strlen($sir_aux); $i++){
foreach($diacritice as $key=>$value){
if($sir_aux[$i]==$key)
$sir_aux[$i]=$value;
}
}
$sir_aux = strtr($sir, $diacritice);
return $sir_aux;
}
Run Code Online (Sandbox Code Playgroud)
假设a是原始字符串,a_translated是翻译后的字符串.
当我使用strpos(a, string_to_find)和时strpos(a_translated, string_to_find),返回的值是不同的.我也检查了strlen(a),strlen(a_translate)他们给出了不同的结果.
为什么会这样?
我需要这个解释,因为我需要搜索带有重音的字符串是否包含给定的普通字符串(没有重音符号),但我必须从原始字符串返回该部分,即使它包含重音符号也是如此.
我尝试了什么我
翻译原始字符串并找到search_string开始的位置,然后我substr(ORIGINAL_STRING, position).这是我注意到位置不对应的地方.
例如:原来的字符串:Universitatea一个FOST înfiinţată在2001年pentru一个oferi ...搜索的字符串:infiintata期望的结果:înfiinţată 2001年pentru一个oferi ...
我正在调用代码
strtr($somevars['thisvar'], "abc")
Run Code Online (Sandbox Code Playgroud)
哪里$somevars['thisvar']包含一个字符串.
它给了我
Warning: strtr() [function.strtr]: The second argument is not an array
Run Code Online (Sandbox Code Playgroud)
为什么?
我正在尝试用strtr同时替换字符串,但我遇到了一个问题.如果同时更换的字母与另一个同时被替换的字母相邻,则不会替换第一个字母后面的字母.我该怎么做才能解决这个问题?谢谢.
$text = " no bacon cats nobody ";
$text = strtr($text, array(" no " => " bacon ", " bacon " => " no ", " cats " => " dogs "));
echo $text;
Run Code Online (Sandbox Code Playgroud)
预期成绩
bacon no dogs nobody
Run Code Online (Sandbox Code Playgroud)
实际结果
bacon bacon dogs nobody
Run Code Online (Sandbox Code Playgroud)
PS:我必须确保这些词不是另一个词的一部分.这就是为什么白色空间在那里.例如,单词"no"是"nobody"的一部分,如果你在字符串中替换了所有"no",它也会替换像"nobody"这样的单词;
php ×11
strtr ×11
replace ×3
string ×2
utf-8 ×2
arrays ×1
asp.net ×1
c# ×1
diacritics ×1
emoticons ×1
preg-replace ×1
regex ×1
str-replace ×1
strpos ×1
unicode ×1