我有这段代码,我想把第一个字母改成大写。但我无法让它工作。作首字母大写
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) –