如何替换一些特殊字符?

How to replace some special characters?

我有一个 PHP 代码可以连接到数据库,select 一个 table 然后从中获取数据。在我的一个专栏中(名为 title),我的数据如下所示:Hello World - This/That is (Test) 但我想转换为:hello-world-this-that-is-test 因为我想在我的 页面的 URL.

中使用这种文本

我是说我需要

  1. 删除 spaces
  2. 删除双破折号或多破折号
  3. 删除斜杠和反斜杠
  4. 删除 ( 和 ) 等括号

并想用我上面写的只有一个破折号替换所有这些。换句话说,我想删除所有特殊字符并将它们转换为只有一个破折号

目前我的代码可以删除 space 和双破折号,但不能删除斜杠和括号。这是我的代码:

<?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"]).' 此代码可以删除 space 和多破折号到只有一个破折号。有用!但是如果标题列有方括号或斜杠,它不能删除它们并且我的代码将失败。

我对 PHP 和 SQL 非常陌生,所以不要怪我。我必须开始学习,但是在阅读了 50 多篇文章之后,我找不到任何有用的东西来做我想做的事。

这是一个使用三个独立的正则表达式对字符串进行连续转换的解决方案:


<?php

$regex1 = "/[^0-9a-z\s]+/i";        // Search for everything that is not alphanumeric or whitespace
$regex2 = "/\s+/";                  // Search for whitespace
$regex3 = "/-+$/";                  // search for trailing dashes

$text = "Hello World - This/That is (Test)";

// replace in turn, non-alpha with space, one or more spaces with dash,
// one or more trailing dashes with nothing 
$text2 = preg_replace([$regex1, $regex2, $regex3],[' ','-',''], $text);

// Switch everything to lower case
$text2 = strtolower($text2);

echo $text2;       // hello-world-this-that-is-test

演示:https://3v4l.org/Pe5hC

(正则表达式纯粹主义者可能能够进一步压缩它,但这很清楚并且易于修改)