我有這段代碼,我想把第一個字母改成大寫。但我無法讓它工作。作首字母大寫
preg_replace('/(<h3[^>]*>)(.*?)(<\/h3>)/i', '$1'.ucfirst('$2').'$3', $bsp)
我有這段代碼,我想把第一個字母改成大寫。但我無法讓它工作。作首字母大寫
preg_replace('/(<h3[^>]*>)(.*?)(<\/h3>)/i', '$1'.ucfirst('$2').'$3', $bsp)
警告: HTML是不是一個正規的語言,不能正確地使用正則表達式解析。改爲使用DOM parser。
$bsp = '<h3>hello</h3>';
$dom = new DOMDocument;
$dom->loadXML($bsp);
foreach ($dom->getElementsByTagName('h3') as $h3) {
$h3->nodeValue = ucfirst($h3->nodeValue);
}
echo $dom->saveHTML();
但如果你是絕對肯定的標記格式是總是一樣的,你可以使用正則表達式。然而,可替換的preg_replace()
,使用preg_replace_callback()
代替:
$bsp = '<h3>hello</h3>';
echo preg_replace_callback('/(<h3[^>]*>)(.*?)(<\/h3>)/i', function ($m) {
return $m[1].ucfirst($m[2]).$m[3];
}, $bsp);
或!!要麼!!!!不要使用正則表達式來解析HTML。 –
@SecondRikudo:是的,我在開頭添加了一個警告。還添加了一個DOMDocument的例子。 –
謝謝,這是極好:) – user3050047
是否第一個字母大寫 - echo ucfirst($str)
使每一個單詞的大寫首字母 - echo ucwords($str)
你甚至讀過標題嗎? –
使用正則表達式解析HTML總是很困難。爲了避免PHP和正則表達式,我建議使用CSS和text-transform屬性。使用
h3 { text-transform: capitalize; }
這可能是最好的解決方案。好想法。 –
是的,如果使用CSS是最佳解決方案。沒有想到這一點。 +1 –
這樣一個DOM解析器可能是:
<?php
$html='<h3>hello world</h3>';
$dom = new DOMDocument;
$dom->loadHTML($html);
echo ucfirst($dom->getElementsByTagName('h3')->item(0)->nodeValue);
輸出:
Hello world
這隻適用於第一個元素。根據他最初的問題,假設他希望它能夠在所有h3元素上工作更安全。 –
使用DOMXPath
:
<?php
$html = 'HTML String <h3>whatever</h3>';
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD); //Don't add a default doctype.
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//h3') as $h3) {
$h3->nodeValue = ucfirst($h3->nodeValue);
}
echo $dom->saveHTML();
將捕獲所有h3
S甚至如果他們不是形式完全按照你的期望。
你不需要'item->'那裏。 '$ h3-> nodeValue = ucfirst($ h3-> nodeValue);'就夠了。 –
@AmalMurali是的,你是對的。編輯。 –
顯示世界和你想要替換的簡單文字 –
[你如何解析和處理PHP中的HTML/XML?](http://stackoverflow.com/questions/3577641/how-do- you-parse-and-process-html-xml-in-php) –