wordpress從php 5.2轉移到php 5.3的相容性問題

把wordpress從php 5.2(win32)移轉到php 5.3(win64),發生了相容性的問題。

一開始是發生在首頁,但如果指定某些頁面又是正常。經過持續不斷的echo , die之後,

最後問題是在wp/wp-includes/formatting.php這隻檔案裡的wptexturize函數。

php 5.3(win64)一般情況還是可以正常執行的。但若是丟給這隻函數處理的文字內容有個 [ 字元,它的解析過程就直接崩潰,連錯誤訊息也沒有,一點反應都不給。

發生問題的是下列片段。這個在php 5.2(win32)完全正常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
	$regex =  '/('			// Capture the entire match.
		.	'<'		// Find start of element. 		
                .	'(?(?=!--)'	// Is this a comment? 		
                .		'.+?--\s*>'	// Find end of comment
		.	'|'
		.		'[^>]+>'	// Find end of element
		.	')'
		. '|'
		.	'\['		// Find start of shortcode.
		.	'\[?'		// Shortcodes may begin with [[
		.	'(?:'
		.		'[^\[\]<>]'	// Shortcodes do not contain other shortcodes.
		.	'|'
		.		'<[^>]+>' 	// HTML elements permitted. Prevents matching ] before >.
		.	')++'
		.	'\]'		// Find end of shortcode.
		.	'\]?'		// Shortcodes may end with ]]
		. ')/s';
 
	$textarr = preg_split( $regex, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

主要是上面數來第10行的 \[? 造成的,拿掉 就正常了。至於為什麼會比對到崩潰,完全無法理解。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *