2012-09-26 27 views
0

裏面有一些單詞下面是我的嘗試:利用標籤

 
ucwords(strtolower('&ltspan class="lsres">retro</span> VIRUS')); 

我想:

我越來越:

 
retro Virus 

我不能做任何事情類似於:

 
sprintf(ucwords(strtolower('%s VIRUS')), ucwords(strtolower('retro'))); 

由於「復古」部分完全隨機地出現在單詞/句子的開始,中間或結尾處。

當然,「復古」只是一個樣本,在不同的情況下,它可以隨機用其他詞替換。

+2

你需要的是一個'preg_replace_callback'。 – hjpotter92

+0

似乎沒有必要(看我的回答) –

回答

1

快速瀏覽PHP的文檔brought this up

和短測試後,我可以證實,這條線做的伎倆爲您的示例(我不知道,你可能有其他特殊情況下,雖然):

$str = '<span class="lsres">retro</span> VIRUS'; 
echo mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); 
+0

不幸的是,如果你嘗試轉換,例如:La Lond e-Les-Maures,你會得到:La LondE-Les-Maures ,而不是:La Londe-Les-Maures(首都E通「跨越」隆德) – Jeffz

+0

好耶。那麼你可能需要一個DOM解析器。因爲不是span,它可能是div,這是一個塊元素。然後Lond和e不會屬於同一個詞。您需要了解很多關於HTML結構(包括語義)的知識才能找出所有這些情況。你真的有一個案例,一個單詞被一個HTML標籤分割嗎? –

0

你由於復古前後沒有空白區域(>retro<),因此獲得retro Virus。在retro之前添加一個空格,或使用ucfirst功能或您在retro和VIRUS上單獨使用的相同功能。像這樣做:

<span class="lsres"><?php echo ucfirst('retro');?></span> <?php echo ucfirst('VIRUS');?> 

OR

<span class="lsres"><?php echo ucwords(strtolower('retro'));?></span> <?php echo ucwords(strtolower('VIRUS'));?>