str_replace
的另一个问题,我想将以下$title
数据更改为网址,方法是在开头和短划线之间使用$string
之间的数字( - )
'
公立学校 - $ 1030万欲望输出是:
芝加哥公立学校
新球衣
位于美国密歇根州公共卫生
我正在使用的PHP代码
$title = ucwords(strtolower(strip_tags(str_replace("1: ", "", $title))));
$x = 1;
while ($x <= 10) {
$title = ucwords(strtolower(strip_tags(str_replace("$x: ", "", $title))));
$x++;
}
$link = preg_replace('/[<>()!#?:.$%\^&=+~`*é"\']/', '', $title);
$money = str_replace(" ", "-", $link);
$link = explode(" - ", $link);
$link = preg_replace(" (\(.*?\))", "", $link[0]);
$amount = preg_replace(" (\(.*?\))", "", $link[1]);
$code_entities_match = array(''s', '"', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '{', '}', '|', ':', '"', '<', '>', '?', '[', ']', '', ';', "'", ',', '.', '_', '/', '*', '+', '~', '`', '=', ' ', '---', '--', '--');
$code_entities_replace = array('', '-', '-', '', '', '', '-', '-', '', '', '', '', '', '', '', '-', '', '', '', '', '', '', '', '', '', '-', '', '-', '-', '', '', '', '', '', '-', '-', '-', '-');
$link = str_replace($code_entities_match, $code_entities_replace, $link);
$link = strtolower($link);
不幸的是我得到的结果:
-chicagoamp9s-public-school
2-new-jersey
3-michigan-public-health
任何人都有更好的解决方案吗?谢谢你们!
( '
变成了amp9 - 想知道为什么?)
答案 0 :(得分:0)
如果我理解正确的话:
if (preg_match('!\d+:\s+(.*)\s+-\s+\$\d+(?:\.\d+)?!', $title, $groups)) {
$words = strip_tags(strtolower($groups[1]));
$words = preg_replace('\[^\s\w]!', '', $words);
$words = preg_replace('!\s+!', '-', $words);
$words = preg_replace('!-+!', '-', $words);
echo $words;
}
有一件事:你的文字有“1.芝加哥......”而非“1:......”就像你的代码似乎暗示的那样。是一个错误还是还有其他事情发生?
答案 1 :(得分:0)
你可以这样做:
$str = "1. Chicago's Public Schools - $10.3M";
$from = array('/^\d+\.\s+([^-]*) -.*$/','/[^A-Z ]/i','/\s+/');
$to = array("$1",'','-');
$str = strtolower(preg_replace($from,$to,$str));
echo $str; // prints chicagos-public-schools
答案 2 :(得分:0)
假设您已经像“芝加哥公立学校”那样正确提取了标题,那么就可以从中生成页面名称:
function generatePagename($s) {
//to lower
$pagename = trim(html_entity_decode(strtolower($s), ENT_QUOTES));
//remove 's
$pagename = trim(preg_replace("/(\'s)/", "", $pagename));
//replace special chars with spaces
$pagename = trim(preg_replace("/[^a-z0-9\s]/", " ", $pagename));
//replace spaces with dashes
$pagename = trim(preg_replace("/\s+/", "-", $pagename));
return $pagename;
}
将转换类似
的内容 Chicago's "Public": Scho-ols1+23
到
chicago-public-scho-ols1-23
。
答案 3 :(得分:0)
<?php
$lines = array("1. Chicago's Public Schools - $10.3M",
"2. New Jersey - $3M",
"3. Michigan: Public Health - $1M"
);
// remove the number bullets
$lines = preg_replace('/\ - \$\d*\.?\d*M$/', '', $lines);
// remove the trailing dollar amount
$lines = preg_replace('/^\d+\.\ /', '', $lines);
// remove ignore chars
$ignore_pattern = "/['s|:]/";
$lines = preg_replace($ignore_pattern, '', $lines);
for ($i=0; $i<count($lines); $i++) {
$lines[$i] = implode('-',explode(' ', strtolower(trim($lines[$i]))));
}
print_r($lines);
和输出:
Array
(
[0] => chicago-public-school
[1] => new-jerey
[2] => michigan-public-health
)
编辑开始:
<?php
$lines = array("1. Chicago's Public Schools - $10.3M",
"2. New Jersey - $3M",
"3. Michigan: Public Health - $1M",
"4. New York's Starbucks - $2M",
);
$lines = preg_replace('/\ - \$\d*\.?\d*M$/', '', $lines);
$lines = preg_replace('/^\d+\.\ /', '', $lines);
$ignore_strings = array("'s", ':');
for ($i=0; $i<count($lines); $i++) {
foreach ($ignore_strings as $s) {
$lines[$i] = str_replace($ignore_strings, '', $lines[$i]);
}
}
for ($i=0; $i<count($lines); $i++) {
$lines[$i] = implode('-',explode(' ', strtolower(trim($lines[$i]))));
}
print_r($lines);
输出:
Array
(
[0] => chicago-public-schools
[1] => new-jersey
[2] => michigan-public-health
[3] => new-york-starbucks
)
希望它符合您的需求。 编辑结束。
答案 4 :(得分:0)
最后,我回顾了初始代码并进行了一些修复:
$title = ucwords(strtolower(strip_tags(str_replace("1. ","",$title))));
$x=1;
while($x <= 10) {
$title = ucwords(strtolower(strip_tags(str_replace("$x. ","",$title))));
$x++;
}
$data = preg_replace('/[<>()!#?:.$%\^&=+~`*&#;"\']/', '',$title);
$urldata = str_replace(" ","-",$data);
$data = explode(" - ",$data);
$link = preg_replace(" (\(.*?\))", "", $data[0]);
$budget = preg_replace(" (\(.*?\))", "", $data[1]);
$code_entities_match = array( '"' ,'!' ,'@' ,'#' ,'$' ,'%' ,'^' ,'&' ,'*' ,'(' ,')' ,'+' ,'{' ,'}' ,'|' ,':' ,'"' ,'<' ,'>' ,'?' ,'[' ,']' ,'' ,';' ,"'" ,',' ,'.' ,'_' ,'/' ,'*' ,'+' ,'~' ,'`' ,'=' ,' ' ,'---' ,'--','--');
$code_entities_replace = array('' ,'-' ,'-' ,'' ,'' ,'' ,'-' ,'-' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'-' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'-' ,'' ,'-' ,'-' ,'' ,'' ,'' ,'' ,'' ,'-' ,'-' ,'-','-');
$link = str_replace($code_entities_match, $code_entities_replace, $link);
$link = strip_tags(str_replace("amp39s","",$link));
$link = strtolower($link);
多么糟糕,我知道,但无论如何它都有效,谢谢你们帮助我,尤其是那些在1和1之间发现错误的人: