我试图在用户输入数据库之前在所有字符串的末尾添加.html后缀。到目前为止,这是我的代码:
strtolower(str_replace(" ", "_", $postTitle));
上面的内容是用户尝试发布的帖子的标题,将其转换为小写,用下划线替换所有空格,并准备将其输入名为post_url的数据库列。
我只需要它做一件事,那就是在每个帖子的末尾添加一个.html。这样做的功能是什么?
答案 0 :(得分:5)
非常简单的回答:
$url_string = strtolower(str_replace(" ", "_", $postTitle)).'html';
但是,你需要考虑安全性并为网址转义坏字符。
你需要删除和非字母数字字符这样做才能解决两个问题
可能的SQL注入
无效网址
例如
// remove all bad chars from string e.g. commas, single quotes etc
$url_string = preg_replace(“/[^a-zA-Z0-9\s]/”, “”, $postTitle);
// replace spaces with underscore and make all lowercase
$url_string = strtolower(str_replace(" ", "_", $url_string));
// add .html to end of string.
$url_string = $url_string.'html';
答案 1 :(得分:2)
也许我没有得到你的问题,但是这个:
strtolower(str_replace(" ", "_", $postTitle)).'.html';
答案 2 :(得分:1)
$postTitle = strtolower(str_replace(" ", "_", $postTitle));
$postTitle .= '.html';
.=
是PhP中的Concatenation和assignment运算符。它会将字符串'.html'添加到$ postTitle的末尾,然后将$ postTitle的值设置为等于它。如果你只想将两个字符串连接在一起,那么就可以这样做:
$string3 = $string1.$string2;
答案 3 :(得分:1)
$newName = strtolower(str_replace(" ", "_", $postTitle)) . '.html';
你提到“白色空间”,虽然你实际上只是捕捉空间,而不是所有类型的空白区域。根据您对特定问题所说的内容,这可能已经足够了,但请确保您考虑选项卡(“\ t”)和/或换行符&也可能存在换行符(“\ n”,“\ r”)。
答案 4 :(得分:1)
对子级:
strtolower(str_replace(" ", "_", $postTitle)).".html";
诀窍?
答案 5 :(得分:1)
在我看来,这是一个更顺畅的解决方案:
function handle_create($string) {
$healthy = array(' ', 'å', 'ä', 'ö');
$yummy = array('-', 'a', 'a', 'o');
$string = str_replace( $healthy, $yummy, mb_strtolower( $string, 'UTF-8' ) );
$string = preg_replace('/-{1,}/', '-', $string );
return preg_replace('/[^a-z0-9\-\/]/i', '', $string) ;
}
$title = 'Lörem ipsum dålor sit amet - consectetur adipiscing elit.';
echo handle_create( $title );
会导致
LOREM-ipsum的-dalor-仰卧阿梅特-consectetur-adipiscing-ELIT