# to keep letters & numbers
$s = preg_replace('/[^a-z0-9]+/i', '_', $s); # or...
$s = preg_replace('/[^a-zd]+/i', '_', $s);
# to keep letters only
$s = preg_replace('/[^a-z]+/i', '_', $s);
# to keep letters, numbers & underscore
$s = preg_replace('/[^w]+/', '_', $s);
# same as third example; suggested by @tchrist; ^w = W
$s = preg_replace('/W+/', '_', $s);
for string
$s = "Hello, is StackOverflow a helpful website!? Yes!";
result (for all examples) is
Hello_is_StackOverflow_a_helpful_website_Yes_
Enjoy!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…