2012-04-17 28 views
1

任何人可以解釋,爲什麼這個代碼PHP使preg_split和UTF-8符號

$string='6аd_ТЕХТ GOOD_TEXT'; 
$words = preg_split('/\s+/', $string, NULL, PREG_SPLIT_NO_EMPTY); 

var_dump($words); 

顯示

array(2) { [0]=> string(8) "6àd_ÒÅÕÒ" [1]=> string(9) "GOOD_TEXT" } 

代替

array(2) { [0]=> string(8) "6аd_ТЕХТ" [1]=> string(9) "GOOD_TEXT" } 

我讀過關於這個問題,但添加/ u:

preg_split('/\s+/', $string, NULL, PREG_SPLIT_NO_EMPTY);// '/\s+/' 

成爲

preg_split('/\s+/u', $string, NULL, PREG_SPLIT_NO_EMPTY);// '/\s+/u' 

沒有幫助。 如何解決這個問題?

謝謝。

+1

ASCII安全字符串不能成爲你使用'preg_split'顯示的內容http://ideone.com/pH45p – zerkms 2012-04-17 21:34:29

回答

1

還有別的東西在你的代碼發生的事情是不存在於所提供的例子。測試所提供的示例,並按預期工作。關於這個真的發生的機會(並且沒有影響$string的其他代碼),這可能是您使用的特定PHP版本的錯誤,並且可以通過升級PHP來解決(但這是不太可能的這是PHP的問題)。

0

......我說這是斜線,但顯然它是使它工作的utf-8的東西。

編輯:我刪除了其餘的,發現我需要的只是xml行,使其在瀏覽器中工作。

<?php 
ini_set('default_charset','utf-8'); 
header('Content-type: text/html; charset=utf-8'); 

echo '<?xml version="1.0" encoding="UTF-8"?'.'> 
<html><head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head><body><pre> 
'; 

$string = "6аd_ТЕХТ GOOD_TEXT"; 
var_dump(preg_split('/\s+/u', $string, NULL, PREG_SPLIT_NO_EMPTY)); 

echo '</pre></body></html>'; 

這是輸出:

array(2) { 
    [0]=> 
    string(13) "6аd_ТЕХТ" 
    [1]=> 
    string(9) "GOOD_TEXT" 
} 
+1

作爲一些背景知識,PHP需要'preg_'函數中的反斜槓才能被轉義。所以,如果你想用'\'來逃避某些事情,你需要使用'\\'。如果你想使用文字反斜槓,你必須使用'\\\\'。巨大的痛苦,但它的作品。 – 0b10011 2012-04-17 21:58:50

+0

@bfrohs你是對的。我甚至沒有用斜線測試它。拿出來,工作得很好。我想只需要utf8的東西告訴php該怎麼做。 – craniumonempty 2012-04-17 22:03:51

+0

@bfrohs實際上,我開始刪除東西,並發現它是做到這一點的xml標籤。 PHP處理其餘的罰款。 – craniumonempty 2012-04-17 22:06:27