【发布时间】:2021-04-23 22:02:37
【问题描述】:
我有一个 PHP 代码将连接到数据库,选择一个表,然后从中获取数据。在我的一个列(名为title)中,我的数据如下:Hello World - This/That is (Test)
但我想转换这个:hello-world-this-that-is-test
因为我想在我的 页面 URL 中使用这种文本。
我的意思是我需要
- 删除空格
- 删除双或多个破折号
- 删除斜杠和反斜杠
- 去掉括号(和)
并且想用我上面写的只用一个破折号替换所有这些。换句话说,我想删除所有特殊字符并将它们转换为只有一个破折号
目前我的代码可以删除空格和双破折号,但不能删除斜杠和括号。这是我的代码:
<?php
define('DBHOST','localhost');
define('DBUSER','user');
define('DBPASS','pass');
define('DBNAME','name');
$db = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
$db->set_charset('utf8mb4');
if(!$db){
die( "Sorry! There seems to be a problem connecting to our database.");
}
$myFile = "sitemap.xml";
$fh = fopen($myFile, 'w') or die("can't open file");
$rss_txt = null;
$rss_txt .= '<?xml version="1.0" encoding="UTF-8"?>';
$rss_txt .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';
$query = mysqli_query($db, "SELECT * FROM posts_articles ORDER BY post_id ASC");
while($values_query = mysqli_fetch_assoc($query)) {
$rss_txt .= '<url>';
$rss_txt .= '<loc>https://example.com/blogs/'.$values_query["post_id"].'/'.$var = preg_replace("/[\s-]+/", "-", $values_query["title"]).'</loc>';
$rss_txt .= '<changefreq>weekly</changefreq>';
$rss_txt .= '<priority>0.7</priority>';
$rss_txt .= '</url>';
}
$rss_txt .= '</urlset>';
fwrite($fh, $rss_txt);
fclose($fh);
?>
好的。我的这部分代码必须得到 title '.$var = preg_replace("/[\s-]+/", "-", $values_query["title"]).' 这个代码可以删除空格和多个破折号,只剩下一个破折号。有用!但是如果标题栏有括号或斜线,它不能删除它们,我的代码会失败。
我对 PHP 和 SQL 非常陌生,所以不要怪我。我必须开始学习,但在阅读了 50 多篇文章后,我找不到任何有用的东西来做我想做的事。
【问题讨论】:
-
正则表达式很难。也许尝试这样的事情: preg_replace("/([\s()\/\-])+(\-?)+/", "-", $values_query["title"]);我只在 regex101.com 上测试过它
-
如果您的问题与字符串操作有关,请专注于此。我们不需要从数据库中检索数据的所有代码。见minimal reproducible example
标签: php preg-replace