<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; PHP字符串函数</title>
	<atom:link href="https://www.phppan.com/tag/php%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%87%bd%e6%95%b0/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sun, 10 May 2026 02:26:45 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>PHP中strtr函数一些奇怪行为的解释</title>
		<link>https://www.phppan.com/2010/01/php-strtr-reason/</link>
		<comments>https://www.phppan.com/2010/01/php-strtr-reason/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 07:26:10 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP字符串函数]]></category>
		<category><![CDATA[PHP源码]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=478</guid>
		<description><![CDATA[PHP中strtr函数一些奇怪行为的解释 前些日子，一哥们给我发了篇文章给我看，说是strtr函数有一些奇怪的 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>PHP中strtr函数一些奇怪行为的解释 </p>
<p>前些日子，一哥们给我发了篇文章给我看，说是strtr函数有一些奇怪的行为，其地址如下：<a href="http://tech.cuit.edu.cn/forum/thread-1867-1-1.html">http://tech.cuit.edu.cn/forum/thread-1867-1-1.html</a><br />
<br />
查看PHP的源码，得到如下解释：</p>
<p>【奇怪行为一】<br />
先来看看这个php字符串替换函数 strtr()的两种状态<br />
strtr(string,from,to)<br />
或者strtr(string,array)<br />
首先针对strtr函数第一种方式<br />
我们看看下面的举例:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">strtr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;I Love you&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Lo&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;lO&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>得到的结果是<br />
I lOve yOu</p>
<p>这个结果提醒我们<br />
1.strtr它是区分大小写的<br />
<br />
【源码分析一】<br />
strtr函数的最终实现函数是string.c文件的2670行的php_strtr函数，其源码如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">PHPAPI <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>php_strtr<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>str<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> len<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>str_from<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>str_to<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> trlen<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> xlat<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">256</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>trlen <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">256</span><span style="color: #339933;">;</span> xlat<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">,</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> trlen<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
xlat<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span> str_from<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> str_to<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> len<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
str<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> xlat<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span> str<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>整个函数是对于256个字符进行hash替换，这256个字符中当然包括大小写字母啦</strong><br />
<br />
【奇怪行为二】<br />
2.strtr的替换是很特殊的，你注意看后面那个yOu，中间的O被替换的，这显然不是我们的本意<br />
<br />
【源码分析二】<br />
<strong>道理同上，它是对每个字符进行对应替换，是以字符为单位，所以替换的是字符，而不是字符串</strong><br />
<br />
【奇怪行为三】<br />
再举一个特殊例子，说明这个php sttr函数的怪异</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">strtr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;I Love you&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Love&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>结果是</p>
<p>  I Love you    </p>
<p>什么也不会改变，所以strtr需要注意的是:不能被替换为空，也就是末位那个参数不能是空字符串，当然空格是可以的。<br />
<br />
【源码分析三】<br />
<strong>在string.c文件的2833行，我们可以看到其调用程序如下：</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">php_strtr<span style="color: #009900;">&#40;</span>Z_STRVAL_P<span style="color: #009900;">&#40;</span>return_value<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 Z_STRLEN_P<span style="color: #009900;">&#40;</span>return_value<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 Z_STRVAL_PP<span style="color: #009900;">&#40;</span>from<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 Z_STRVAL_PP<span style="color: #009900;">&#40;</span>to<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 MIN<span style="color: #009900;">&#40;</span>Z_STRLEN_PP<span style="color: #009900;">&#40;</span>from<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> 
 Z_STRLEN_PP<span style="color: #009900;">&#40;</span>to<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>MIN(Z_STRLEN_PP(from),  Z_STRLEN_PP(to))是取from和to两个字符串的长度中最小的，如三所示的情况，其结果为0，从php_strtr函数中我们可以看到</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>trlen <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>当长度小于1时返回原来的字符串。所以。。。。<br />
<br />
【奇怪行为四】<br />
再次举例strtr函数的另一种情况</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">strtr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;I Loves you&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Love&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;lOvEA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>结果是</p>
<p>          I lOvEs yOu  </p>
<p>注意看第三个参数的A，在结果中并没有出现<br />
【源码分析三】<br />
<strong>其理由与二类似，MIN(Z_STRLEN_PP(from),  Z_STRLEN_PP(to))是取from和to两个字符串的长度中最小的</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span> php_strtr_array<span style="color: #009900;">&#40;</span>zval <span style="color: #339933;">*</span>return_value<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>str<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> slen<span style="color: #339933;">,</span> HashTable <span style="color: #339933;">*</span>hash<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
zval <span style="color: #339933;">**</span>entry<span style="color: #339933;">;</span>
<span style="color: #993333;">char</span>  <span style="color: #339933;">*</span>string_key<span style="color: #339933;">;</span>
uint   string_key_len<span style="color: #339933;">;</span>
zval <span style="color: #339933;">**</span>trans<span style="color: #339933;">;</span>
zval   ctmp<span style="color: #339933;">;</span>
ulong num_key<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> minlen <span style="color: #339933;">=</span> <span style="color: #0000dd;">128</span><span style="color: #339933;">*</span><span style="color: #0000dd;">1024</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> maxlen <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> pos<span style="color: #339933;">,</span> len<span style="color: #339933;">,</span> found<span style="color: #339933;">;</span>
<span style="color: #993333;">char</span> <span style="color: #339933;">*</span>key<span style="color: #339933;">;</span>
HashPosition hpos<span style="color: #339933;">;</span>
smart_str result <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
HashTable tmp_hash<span style="color: #339933;">;</span>
zend_hash_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp_hash<span style="color: #339933;">,</span> zend_hash_num_elements<span style="color: #009900;">&#40;</span>hash<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
zend_hash_internal_pointer_reset_ex<span style="color: #009900;">&#40;</span>hash<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>hpos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>zend_hash_get_current_data_ex<span style="color: #009900;">&#40;</span>hash<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>entry<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>hpos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> SUCCESS<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>zend_hash_get_current_key_ex<span style="color: #009900;">&#40;</span>hash<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>string_key<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>string_key_len<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>num_key<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>hpos<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">case</span> HASH_KEY_IS_STRING<span style="color: #339933;">:</span>
len <span style="color: #339933;">=</span> string_key_len<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
zend_hash_destroy<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp_hash<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
RETURN_FALSE<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
zend_hash_add<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp_hash<span style="color: #339933;">,</span> string_key<span style="color: #339933;">,</span> string_key_len<span style="color: #339933;">,</span> entry<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>zval<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&gt;</span> maxlen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
maxlen <span style="color: #339933;">=</span> len<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&lt;</span> minlen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
minlen <span style="color: #339933;">=</span> len<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> 
<span style="color: #b1b100;">case</span> HASH_KEY_IS_LONG<span style="color: #339933;">:</span>
Z_TYPE<span style="color: #009900;">&#40;</span>ctmp<span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> IS_LONG<span style="color: #339933;">;</span>
Z_LVAL<span style="color: #009900;">&#40;</span>ctmp<span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> num_key<span style="color: #339933;">;</span>
convert_to_string<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>ctmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
len <span style="color: #339933;">=</span> Z_STRLEN<span style="color: #009900;">&#40;</span>ctmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
zend_hash_add<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp_hash<span style="color: #339933;">,</span> Z_STRVAL<span style="color: #009900;">&#40;</span>ctmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> len<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> entry<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>zval<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
zval_dtor<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>ctmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&gt;</span> maxlen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
maxlen <span style="color: #339933;">=</span> len<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">&lt;</span> minlen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
minlen <span style="color: #339933;">=</span> len<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
zend_hash_move_forward_ex<span style="color: #009900;">&#40;</span>hash<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>hpos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
key <span style="color: #339933;">=</span> emalloc<span style="color: #009900;">&#40;</span>maxlen<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> slen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">+</span> maxlen<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> slen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
maxlen <span style="color: #339933;">=</span> slen <span style="color: #339933;">-</span> pos<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
found <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066;">memcpy</span><span style="color: #009900;">&#40;</span>key<span style="color: #339933;">,</span> str<span style="color: #339933;">+</span>pos<span style="color: #339933;">,</span> maxlen<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>len <span style="color: #339933;">=</span> maxlen<span style="color: #339933;">;</span> len <span style="color: #339933;">&gt;=</span> minlen<span style="color: #339933;">;</span> len<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
key<span style="color: #009900;">&#91;</span>len<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>zend_hash_find<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp_hash<span style="color: #339933;">,</span> key<span style="color: #339933;">,</span> len<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>trans<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> SUCCESS<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #993333;">char</span> <span style="color: #339933;">*</span>tval<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> tlen<span style="color: #339933;">;</span>
zval tmp<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Z_TYPE_PP<span style="color: #009900;">&#40;</span>trans<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> IS_STRING<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
tmp <span style="color: #339933;">=</span> <span style="color: #339933;">**</span>trans<span style="color: #339933;">;</span>
zval_copy_ctor<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
convert_to_string<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tval <span style="color: #339933;">=</span> Z_STRVAL<span style="color: #009900;">&#40;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tlen <span style="color: #339933;">=</span> Z_STRLEN<span style="color: #009900;">&#40;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
tval <span style="color: #339933;">=</span> Z_STRVAL_PP<span style="color: #009900;">&#40;</span>trans<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tlen <span style="color: #339933;">=</span> Z_STRLEN_PP<span style="color: #009900;">&#40;</span>trans<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
smart_str_appendl<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>result<span style="color: #339933;">,</span> tval<span style="color: #339933;">,</span> tlen<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
pos <span style="color: #339933;">+=</span> len<span style="color: #339933;">;</span>
found <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Z_TYPE_PP<span style="color: #009900;">&#40;</span>trans<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> IS_STRING<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
zval_dtor<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> found<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
smart_str_appendc<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>result<span style="color: #339933;">,</span> str<span style="color: #009900;">&#91;</span>pos<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
efree<span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
zend_hash_destroy<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>tmp_hash<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
smart_str_0<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
RETVAL_STRINGL<span style="color: #009900;">&#40;</span>result.<span style="color: #202020;">c</span><span style="color: #339933;">,</span> result.<span style="color: #202020;">len</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2010/01/php-strtr-reason/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
